我有一个适用于 Android 的绘图应用程序,我目前正在尝试为其添加一个真正的橡皮擦。以前,我只是用白色油漆做橡皮擦,但现在我允许使用背景颜色和图像,所以不再这样做了。我通过在透明画布下方放置一个图像视图来做到这一点。
我面临的问题是,每当我启用橡皮擦时,它会在我的手指向下时画出一条纯黑色的轨迹,但一旦我松开它就会变成透明的。请参阅下面的屏幕截图:
这就是我的手指在屏幕上时的样子——一条纯黑色的轨迹
这就是我将手指从屏幕上移开后的样子
因此,似乎我已经接近了,但我找不到正确的设置组合来避免在擦除时手指触摸时出现黑色痕迹。以下是一些相关的代码片段:
绘制
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.TRANSPARENT);
canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
canvas.drawPath(mPath, mPaint);
canvas.drawPath(mPreviewPath, mPaint);
}
触摸事件
@Override
public boolean onTouchEvent(MotionEvent event) {
float currentX = event.getX();
float currentY = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
touchStart(currentX, currentY);
invalidate();
break;
case MotionEvent.ACTION_MOVE:
touchMove(currentX, currentY);
invalidate();
break;
case MotionEvent.ACTION_UP:
touchUp(currentX, currentY);
invalidate();
break;
}
return true;
}
当前尝试橡皮擦设置
public void startEraser() {
mPaint.setAlpha(0);
mColor = Color.TRANSPARENT;
mPaint.setColor(Color.TRANSPARENT);
mPaint.setStrokeWidth(mBrushSize);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setMaskFilter(null);
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
mPaint.setAntiAlias(true);
}
还有其他几篇关于橡皮擦的帖子,但大多数都只是说使用PorterDuff.Mode.CLEAR
,setMakFilter(null)
而且应该可以。在我的情况下,它没有。无论我尝试什么,我都会先得到黑色轨迹,然后只有在发布后才能得到想要的结果。
如有必要,我可以提供更多代码。