Android Paint PorterDuff.Mode.CLEAR 无法正常工作

标签 android android-canvas

我正在尝试从 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/

相关文章:

android - RecyclerView notifyItemInserted() 动画在位置为 0 时不显示,但在其他位置可以正常工作

android - 布局中的布局android

android - Proguard 是否缩小了我的常量?

java - 删除自定义 ListView 中的重复联系人

android - 如何使用 Canvas 制作位图可点击?

android - 在 android 中创建可绘制和可缩放的 ImageView

Android:带有持续可见滚动条的Fingerpaint

java - 使用 notifyDataSetChanged() 时,Android API ListView 不会更新;

Android:如何在方向更改时保存自定义手指绘画 View

Android 在 Canvas 中创建图层