在Android FingerPaint演示中,如何擦除绘制的路径

时间:2011-08-15 10:22:02

标签: paint android

我一直在尝试更改Android(v3.0 Honeycomb)API Demo FingerPaint(API> = 11)以包含一个工作擦除选项,用于删除最后绘制的路径。

API演示中的擦除无法正常工作,在v3.0中崩溃,在v3.1中绘制黑盒子而只是部分擦除路径(已经提出错误,不确定它是否已在v3中解决) .2 [不适用于英国的Xoom设备]。

我的代码如下:

public void eraseLastPath() {
    if (!mPaths.isEmpty()) {
        mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
        mCanvas.drawPath(mPaths.pop(), mPaint);
        invalidate();
    }
}

这有点起作用,但在画布上留下了绘制路径的轮廓。 e.g。

此: enter image description here

被删除看起来像这样: enter image description here

我错过了什么?有没有更好的方法来擦除路径?

非常感谢任何帮助。

由于

2 个答案:

答案 0 :(得分:3)

尝试设置mPaint反别名。

编辑:

擦除路径的正确方法是将所有笔划存储到ArrayList中,然后删除不需要的笔划并重绘所有内容。问题中使用的方法并不是真正删除路径,而是更像是在其上绘制另一种颜色,但是反别名与第一种颜色不同。

每个路径都需要是新类“笔画”中的成员对象,它还包含颜色,绘画,滤镜等。通过这种方式,可以恢复所有绘图,并且可以进行无限撤消。

答案 1 :(得分:1)

分别抓住最后绘制的Path(未绘制到Bitmap)进行绘制。这允许您在将Path提交给支持Bitmap之前操纵private List<Path> undoablePaths; @Override protected void onDraw(Canvas canvas) { for(Path path : undoablePaths){ canvas.drawPath(path, pathPaint); } canvas.drawBitmap(mainBitmap, 0, 0, bitmapPaint); } private void undoLast(){ undoablePaths.remove(undoablePaths.size() - 1); invalidate(); }

例如:

Path

注意:该示例不允许使用多种颜色。您可以扩展Paint对象并在其上保留颜色信息(并相应地设置android:hardwareAccelerated="true")。

此外,如果您使用Honeycomb设备,请确保使用{{1}}打开硬件加速。