私はアンドロイドキャンバスを初めて使用していますが、私の問題の解決に失敗しました。 問題は次のとおりです: 私は2つのモードでキャンバスを使用していますAvoidXfermode.Mode.TARGET色)とPorterDuff.Mode.CLEAR(キャンバスの一部を消すため)。 キャンバスビットマップが保存されていません
すべてが独立して、完璧な を取り組んでいるが、私のコードで私は特定の色を消去したい選択したときに、それを消去しなければならない、と私のコードがそうするように、それらの両方を使用する場合、
しかし、消しゴムモードに切り替えるときにその特定の色を削除した後... AvoidXfermodeを使用して削除されたものがすべて戻ってきます。
私は私のonDrawメソッドがある 、ビットマップ上でこれらの事をしています:
@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(DrawBitmap, 0, 0, DrawBitmapPaint);
if (flag != 1) {
setDrawingCacheEnabled(true);
for (Path p : paths) {
canvas.drawPath(p, mPaint);
Bitmap bitmap = getDrawingCache();
DrawBitmap = bitmap;
//
}
//canvas.setBitmap(bitmap.isMutable() ? bitmap : bitmap.copy(Bitmap.Config.ARGB_8888,true));
} else if (flag == 1) {
if (touchx > mCanvas.getWidth() || touchy > mCanvas.getHeight() || touchx < 0 || touchy < 0) {
return;
}
for (Path p : paths) {
color = DrawBitmap.getPixel(touchx, touchy);
mPaint.setXfermode(new AvoidXfermode(color, 100, AvoidXfermode.Mode.TARGET));
mPaint.setColor(Color.TRANSPARENT);
canvas.drawPaint(mPaint);
setDrawingCacheEnabled(true);
Bitmap bitmap = getDrawingCache();
DrawBitmap = bitmap;
}
}
}
すべてが、ちょうどこの質問のために今のところonDrawで宣言さ と私は私のモードを切り替えるコードがあるされています。
case R.id.erase:
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
mPaint.setColor(Color.TRANSPARENT);
mPaint.setStrokeWidth(40);
flag = 0;
break;
case R.id.DELETE:
flag = 1;
break;
私は私キャンバスを作成していたコードは次のとおりです
DrawBitmap = BitmapFactory.decodeResource(MainActivity.this.getResources(), R.drawable.sample);
DrawBitmap = DrawBitmap.copy(Bitmap.Config.ARGB_8888, true);
mCanvas = new Canvas(DrawBitmap);
mPath = new Path();
paths.add(mPath);
DrawBitmapPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
私はどこかに間違っていますが、私はどこにいても、何かアドバイスが役立つだろう、事前に感謝します。
私は自分のモードをAvoidXfermodeから消しゴムモードに切り替えるたびに、すべてのものが再び戻ってきていることに気づきました。 。 – Ashwani
と私はmCanvasだけを使用している場合は何も描画されていません.. :( – Ashwani
私は何をしたいのですか?handyclosetによって写真レイヤのようなアプリです。自動消去の背景と手動消去の機能。 – Ashwani