问题描述
我有 Activity 和那个 Activity,每当我试图在该自定义视图上绘制一些东西时,我都会有一个自定义视图,它工作正常,并且 onDraw 方法调用正常,但是当我完成()该活动并重新启动时活动我无法在其上绘制任何内容,因为该类的 onDraw 未触发。
开始活动的代码
Intent inten1t = new Intent(this,CameraPreviewActivity.class);
inten1t.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
inten1t.putExtra("width",dHeight);
inten1t.putExtra("height",dWidth);
startActivityForResult(inten1t,321);
public class PaintViewnormal extends View implements normalDrawingListener,CustomnormalDrawingListner {
public static int Brush_SIZE = 10;
public static int DEFAULT_COLOR = Color.WHITE;
public static final int DEFAULT_BG_COLOR = Color.TRANSPARENT;
private Paint mPaint;
private ArrayList<FingerPath> paths = new ArrayList<>();
public static int currentColor;
private static int backgroundColor = DEFAULT_BG_COLOR;
private int strokeWidth;
private MaskFilter memboss;
private MaskFilter mBlur;
private Bitmap mBitmap;
private Canvas mCanvas;
private Paint mBitmapPaint = new Paint(Paint.DITHER_FLAG);
Canvas canvas;
public static normalDrawingListener normalDrawingListener;
private float positionX;
private float positionY;
private Bitmap bitmapNew;
private String isTextLable = "";
private String textLableNew = "";
public static CustomnormalDrawingListner customnormalDrawingListner;
private boolean isFirstTime;
private final static String TAG="##PaintViewnormal";
public PaintViewnormal(Context context) {
this(context,null);
}
public PaintViewnormal(Context context,AttributeSet attrs) {
super(context,attrs);
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setDither(true);
mPaint.setColor(DEFAULT_COLOR);
mPaint.setStyle(Paint.Style.stroke);
mPaint.setstrokeJoin(Paint.Join.ROUND);
mPaint.setstrokeCap(Paint.Cap.ROUND);
mPaint.setXfermode(null);
mPaint.setAlpha(0xff);
memboss = new embossMaskFilter(new float[]{1,1,1},0.4f,6,3.5f);
mBlur = new BlurMaskFilter(5,BlurMaskFilter.Blur.norMAL);
normalDrawingListener = this;
customnormalDrawingListner = this;
setwillNotDraw(false);
}
@Override
protected void onLayout(boolean b,int i,int i1,int i2,int i3) {
}
public void init(Size screensSize) {
isFirstTime = true;
int height;
int width = screensSize.getWidth();
height = RemoteUtils.newnormalHeight;
if (height == 0) {
height = screensSize.getHeight();
}
Log.d("##INIT_SIZE",String.valueOf(height));
mBitmap = Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(mBitmap);
currentColor = DEFAULT_COLOR;
strokeWidth = Brush_SIZE;
}
public void clear() {
textLableNew="";
isTextLable="clear";
mCanvas.drawColor(Color.TRANSPARENT,PorterDuff.Mode.CLEAR);
backgroundColor = DEFAULT_BG_COLOR;
paths.clear();
invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
canvas.save();
Log.d(TAG,"##ONDRAW");
mCanvas.drawColor(backgroundColor);
drawTextimage(mCanvas);
for (FingerPath fp : paths) {
mPaint.setColor(fp.color);
mPaint.setstrokeWidth(fp.strokeWidth);
mPaint.setMaskFilter(null);
if (fp.emboss)
mPaint.setMaskFilter(memboss);
else if (fp.blur)
mPaint.setMaskFilter(mBlur);
mCanvas.drawPath(fp.path,mPaint);
}
int startX = (getWidth() - mBitmap.getWidth()) / 2;
int startY = (getHeight() - mBitmap.getHeight()) / 2;
Log.d(TAG,"HEIGHT : " + mBitmap.getHeight());
canvas.drawBitmap(mBitmap,startX,startY,mBitmapPaint);
canvas.restore();
}
@Override
public void onDrawForeground(Canvas canvas) {
super.onDrawForeground(canvas);
this.canvas = canvas;
}
@Override
public void onnormalDrawing(MotionEvent event,String drawingType) {
if (drawingType.equalsIgnoreCase("delete")) {
clear();
return;
}
if (isFirstTime) {
isTextLable = "text";
textLableNew = "";
positionX = event.getX();
positionY = event.getY();
invalidate();
isFirstTime = false;
}
}
@Override
public void onTextDrawn(MotionEvent event,String textLable) {
Log.d("##norMAL_TEXT",textLable);
isTextLable = "text";
textLableNew = textLable;
positionX = event.getX();
positionY = event.getY();
invalidate();
}
@Override
public void onImageShown(MotionEvent event,Bitmap bitmap) {
}
private void drawTextimage(Canvas canvas) {
if (isTextLable.equalsIgnoreCase("text")) {
Paint paint = new Paint();
paint.setStyle(Paint.Style.FILL);
canvas.save();
canvas.drawColor(Color.TRANSPARENT);
paint.setstrokeWidth(1);
paint.setColor(Color.magenta);
paint.setTextSize(50);
paint.setStyle(Paint.Style.FILL);
paint.setAntiAlias(true);
canvas.drawText(textLableNew,positionX,positionY,paint);
canvas.restore();
}
if (isTextLable.equalsIgnoreCase("img")) {
Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmapNew,100,200,false);
canvas.drawBitmap(scaledBitmap,mPaint);
}
if (isTextLable.equalsIgnoreCase("clear")){
canvas.drawColor(Color.TRANSPARENT,PorterDuff.Mode.CLEAR);
}
}
}
在我的活动初始化代码中
private void initnormalDrawing() {
paintViewnormal = findViewById(R.id.paintviewnormal);
displayMetrics metrics = new displayMetrics();
getwindowManager().getDefaultdisplay().getMetrics(metrics);
Size size = new Size(RemoteUtils.getRealSizeWidth(),RemoteUtils.getRealSizeHeight());
if (size.getHeight() == 0) {
size = new Size(metrics.widthPixels,metrics.heightPixels);
}
paintViewnormal.init(size);
paintViewnormal.normal();
}
一切正常,一切都很好,但是每当我完成活动并重新启动活动时,onDraw 方法都不会调用。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)