我正在尝试从 Android SDK 创建一个类似于 Finger Paint 示例的应用程序。我试图在我的测试应用程序中实现撤消/重做功能,并在这个问题中使用了公认的答案:Android FingerPaint Undo/Redo implementation .
那里的例子是有效的,但我注意到了一些奇怪的事情。例如,如果我在单击某些按钮时选择橡皮擦模式,则默认实现就像橡皮擦一样,但使用 onDraw()
并没有像上面提到的问题那样执行此操作。它不像普通画笔那样使用黑色描边绘制(取决于给定的颜色)。
如果我尝试向当前画笔添加其他效果,例如我画了 15 条线,然后选择添加模糊选项,在我绘制新线之后,之前的所有线也会变得模糊。
if (mPaint.getMaskFilter() != mBlur) {
mPaint.setMaskFilter(mBlur);
} else {
mPaint.setMaskFilter(null);
}
return true;
所以我的问题是..有什么想法可以将旧行与新行分开并仅为它们设置效果并使用应有的清晰模式吗?
感谢您的帮助!
最佳答案
你宁愿将历史保存在如下一个对象中,而不是只保存路径对象..
class pathInfo {
Path mPath;
int mStyle;
boolean mbAntiAlias;
....
}
然后在绘制每条路径时从这些对象中挑选出相应的信息
protected void onDraw(Canvas canvas) {
for (PathInfo p : pathsInfo){
mPaint.setStyle(p.mStyle);
....
canvas.drawPath(p.mPath, mPaint);
}
}
关于Android Paint PorterDuff.Mode.CLEAR 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10582698/