【问题标题】:Android Paint PorterDuff.Mode.CLEAR not working properlyAndroid Paint PorterDuff.Mode.CLEAR 无法正常工作
【发布时间】:2012-05-14 11:44:42
【问题描述】:

我正在尝试从 Android SDK 创建一个类似于 Finger Paint 示例的应用程序。我试图在我的测试应用程序中实现撤消/重做功能,并在这个问题中使用了公认的答案:Android FingerPaint Undo/Redo implementation

那里的例子有效,但我注意到了一件奇怪的事情。例如,如果我在某些按钮单击时选择橡皮擦模式,则默认实现就像橡皮擦一样,但在上面提到的问题中使用onDraw() 不会这样做。而不是像普通画笔一样使用黑色笔触进行绘制(取决于给定的颜色)。

如果我尝试向当前画笔添加其他效果,例如我画了 15 条线,然后选择添加模糊选项,在我绘制新的之后,之前的所有线也会变得模糊。

            if (mPaint.getMaskFilter() != mBlur) {
                mPaint.setMaskFilter(mBlur);
            } else {
                mPaint.setMaskFilter(null);
            }
            return true;

所以我的问题是..任何想法如何将旧行与新行分开并仅为它们设置效果并使用应有的清晰模式?

感谢您的任何帮助!

【问题讨论】:

    标签: android android-canvas


    【解决方案1】:

    您宁愿将历史记录保存在像下面这样的对象中,而不仅仅是保存路径对象..

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

    【讨论】:

      猜你喜欢
      • 2012-05-16
      • 1970-01-01
      • 2018-02-20
      • 2017-03-10
      • 2012-09-13
      • 2012-03-24
      • 2012-11-03
      • 2013-11-24
      • 1970-01-01
      相关资源
      最近更新 更多