我一直在尝试更改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。
此:
被删除看起来像这样:
我错过了什么?有没有更好的方法来擦除路径?
非常感谢任何帮助。
由于
乔
答案 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}}打开硬件加速。