おはようございます、
私のアプリの一部には、手書きのメモを書き留める機能があります。フィンガーペイントの例の一部を使用して、アプリに「消しゴム」を実装しています。
mPaint.setXfermode(new PorterDuffXfermode(
PorterDuff.Mode.CLEAR));
mPaint.setStrokeWidth(45);
mPaint.setStrokeCap(Paint.Cap.ROUND);
問題は、私が消去するたびに、ユーザーが消去した黒いパスがあることです。ユーザーが指を離すと消えますが、消去している間はそこにあります。私の友人は、PorterDuffモードはリアルタイムで使用されることは想定されていないと言っていますが、私は彼を信じていません。何か馬鹿げたことをした場合に備えて、コードをもう少し示します。
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setDither(false);
mPaint.setColor(Color.BLACK);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);
mPaint.setStrokeCap(Paint.Cap.BUTT);
mPaint.setStrokeWidth(6);
mBitmap = Bitmap.createBitmap(800, 480,Bitmap.Config.ARGB_8888);
bBitmap = Bitmap.createBitmap(800, 480,Bitmap.Config.ARGB_8888);
bBitmap.eraseColor(Color.WHITE);
mCanvas = new Canvas(mBitmap);
mPath = new Path();
mBitmapPaint = new Paint();
maxX = maxY = 100;
minX = 750;
minY = 400;
//
private void touch_up() {
mPath.lineTo(mX, mY);
mCanvas.drawPath(mPath, mPaint);
mPath.reset();
}
//
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(bBitmap, 0, 0, null);
canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
canvas.drawPath(mPath, mPaint);
}
この消しゴムでやりたいことをすることはできますか?これを行うためのより良い方法はありますか?私の友達は実際に正しいですか?
また、消去として白を塗ってみましたが、下にユーザーがマークアップしている画像がある場合があるため、うまくいきません。すべての白いピクセルを通過させて透明にすることはできますが、それは非常に非効率的なようです。