首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Android FingerPaint演示中,如何擦除绘制的路径

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

Stack Overflow用户
提问于 2011-08-15 18:22:02
回答 2查看 2.9K关注 0票数 2

我一直在尝试修改Android (v3.0蜂巢) API Demo FingerPaint (API >= 11),使其包含一个可以删除最后绘制的路径的有效擦除选项。

API demo中的擦除不能很好地工作,在v3.0中是崩溃,在v3.1中是绘制一个黑盒,而只是部分擦除路径(一个bug已经被提出,不确定它是否已经在v3.2中被解决,而不是在英国的Xoom设备上)。

我的代码如下:

代码语言:javascript
运行
复制
public void eraseLastPath() {
    if (!mPaths.isEmpty()) {
        mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
        mCanvas.drawPath(mPaths.pop(), mPaint);
        invalidate();
    }
}

这在某种程度上是可行的,但会在画布上留下所绘制路径的轮廓。例如:

这一点:

被擦除为如下所示:

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

任何帮助都是非常感谢的。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-15 21:19:21

尝试将mPaint抗锯齿设置为打开。

编辑:

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

每条路径都需要是一个新的“笔划”类中的成员对象,这个类还存储了颜色、颜料、滤镜等。这样,所有的绘图都可以恢复,并且可以无限地撤消。

票数 3
EN

Stack Overflow用户

发布于 2011-08-15 18:38:57

将上次绘制的Path分开(不绘制到Bitmap上)进行绘制。这允许您在将Path提交到支持Bitmap之前操作它们。

例如:

代码语言:javascript
运行
复制
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"打开了硬件加速。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7063868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档