如何在Android画布中擦除/清除路径?

时间:2015-12-08 09:45:19

标签: android canvas android-view

我正在制作一个具有擦除/撤消/重做功能的绘图应用程序。 添加撤消/重做功能后,橡皮擦只绘制一条黑色路径。 每次绘制路径时(在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);
}

我不想使用背景颜色作为橡皮擦,因为我必须在图像上绘画。

请帮我实现一个简单的橡皮擦。

非常感谢

0 个答案:

没有答案