我的代码工作正常,直到桌子或设备旋转。旋转时,绘图被清除,我了解到它会发生,因为当设备旋转时,活动会重新启动。我的问题是如何重绘并将数据保存到 onSaveInstanceState。很多人说我必须使用onSaveInstanceState来保存绘图,但是当我必须保存的数据类型是Path时我不知道该怎么做。
这是我的代码片段
public class MyDrawView extends View implements OnTouchListener {
MyDrawView drawView;
float prevX = 0;
float prevY = 0;
private Bitmap mBitmap;
private Canvas mCanvas;
private Path mPath;
private Paint mBitmapPaint;
private Paint mPaint;
private int w,h;
private ArrayList<Path> paths = new ArrayList<Path>();
private ArrayList<Paint> bitPaints = new ArrayList<Paint>();
private ArrayList<Paint> pathPaints = new ArrayList<Paint>();
Paint tempPaint;
private String filename="";
public MyDrawView(Context c,String filename) {
super(c);
mPath = new Path();
mBitmapPaint = new Paint(Paint.DITHER_FLAG);
this.filename=filename;
setFocusable(true);
setFocusableInTouchMode(true);
this.setOnTouchListener(this);
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setDither(true);
mPaint.setColor(Color.RED);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);
mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setStrokeWidth(6);
tempPaint=new Paint(mPaint);
mCanvas = new Canvas();
mPath = new Path();
if (rotated){
setDefaultDrawing();
}
}
public void setDefaultDrawing()
{
}
public Bitmap getBitmap(){
return this.mBitmap;
}
public void setStrokeWidth(float width){
mPaint.setStrokeWidth(width);
}
public void setColor(int color){
mPaint.setColor(color);
}
public String getFileName(){
return this.filename;
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
this.w=w;
this.h=h;
mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(mBitmap);
Path tempPath=new Path(mPath);
paths.add(tempPath);
Paint tempPaint=new Paint(mPaint);
pathPaints.add(tempPaint);
Paint tempBitPaint=new Paint(mBitmapPaint);
bitPaints.add(tempBitPaint);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
canvas.drawPath(mPath, mPaint);
}