以下のように WebView にキャンバスを作成しています。ユーザーがボタンをクリックして描画されたパスを削除できるように、元に戻す機能を実装しています。ただし、アクティビティを終了して戻った場合でも、キャンバスには常にパスが入力されています。それを削除する唯一の方法は、アプリを閉じることです。canvasBitmap
ビットマップまたはキャンバスを削除または再作成する方法drawCanvas
public static Canvas drawCanvas;
public static Bitmap canvasBitmap;
Rect clipBounds;
public static ArrayList<Path> paths = new ArrayList<Path>();
public static ArrayList<Paint> colors = new ArrayList<Paint>();
// Creates bitmap for canvas
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
canvasBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
drawCanvas = new Canvas(canvasBitmap);
}
// Saves the paths onto the bitmap and adjust scale based on current zoom level
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
clipBounds = canvas.getClipBounds();
drawPaint.setStrokeWidth(8/mScaleFactor);
canvas.scale(mScaleFactor, mScaleFactor, 0, 0);
for (int i = 0; i < colors.size(); i++) {
canvas.drawPath(paths.get(i), colors.get(i));
}
canvas.drawPath(drawPath, drawPaint);
canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint);
invalidate();
}
public boolean onTouchEvent(MotionEvent event) {
pointerCount = event.getPointerCount();
mScaleDetector.onTouchEvent(event);
float touchX = (event.getX() + clipBounds.left) / mScaleFactor;
float touchY = (event.getY() + clipBounds.top) / mScaleFactor;
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
drawPath.moveTo(touchX, touchY);
break;
case MotionEvent.ACTION_MOVE:
drawPath.lineTo(touchX, touchY);
break;
case MotionEvent.ACTION_UP:
Paint newPaint = new Paint();
newPaint.set(drawPaint); //copies the values over from the current class's paint
colors.add(newPaint);
paths.add(drawPath);
drawPath = new Path();
drawPath.reset();
break;
default:
return false;
}
}
invalidate();
return true;
}
public void reDrawUndo () {
if (paths.size() > 0) {
paths.remove(paths.size() - 1);
colors.remove(colors.size() - 1);
invalidate();
}
}
このメソッドを使用して、対応する色のパスをキャンバスに描画しています。
for (int j = 0; j < paths.size(); j++) {
drawCanvas.drawPath(paths.get(j),colors.get(j));
}