我正在制作一个具有擦除/撤消/重做功能的绘图应用程序。 添加撤消/重做功能后,橡皮擦只绘制一条黑色路径。 每次绘制路径时(在MotionEvent.ACTION_UP上)都会指向链接列表的路径。如果eraseMode打开,我将颜色设置为-1,以便我可以在onDraw中处理它。
private void touch_up() {
drawPath.lineTo(mX, mY);
drawCanvas.drawPath(drawPath, drawPaint);
if(!eraseMode) {
pathColor.put(drawPath, paintColor);
paths.add(drawPath);
}
else {
pathColor.put(drawPath, -1);
paths.add(drawPath);
}
drawPath = new Path(); // new obj or drawPath.reset();
}
然后在onDraw上,我遍历路径列表并将路径绘制到画布上
@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint);
for (int i = 0; i < paths.size(); i++) {
if(pathColor.get(paths.get(i)) != -1)
{
drawPaint.setColor(pathColor.get(paths.get(i)));
canvas.drawPath(paths.get(i), drawPaint);
}
else
{
drawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
canvas.drawPath(paths.get(i), drawPaint);
}
drawPaint.setXfermode(null);
}
drawPaint.setColor(paintColor);
canvas.drawPath(drawPath, drawPaint);
}
但是所有删除的线都是黑色的。
为什么下面会画一条黑线
drawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
canvas.drawPath(somePath, drawPaint);
为什么我不能用橡皮擦模式绘制路径? 如果在onDraw方法中取出for循环(如下所示),为什么橡皮擦会起作用?
@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
canvas.drawPath(mPath, mPaint);
}
我不想使用背景颜色作为橡皮擦,因为我必须在图像上绘画。
请帮我实现一个简单的橡皮擦。
非常感谢