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

时间:2012-05-14 11:44:43

标签: 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;

所以我的问题是......如何将旧线与新线分开并仅为它们设置效果并使用清晰模式应该是什么?

感谢您提供任何帮助!

1 个答案:

答案 0 :(得分:0)

您宁愿在以下对象中保存历史记录,而不仅仅是保存路径对象..

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);
    }

}