【问题标题】:Eraser with PorterDuff.Mode.CLEAR not working in canvas带有 PorterDuff.Mode.CLEAR 的橡皮擦在画布中不起作用
【发布时间】:2012-11-05 12:04:54
【问题描述】:

我需要为具有画布的绘画应用程序实现橡皮擦:

Canvas canvas = new Canvas(bitmap);

其中位图是一个可变位图。 我用下面的 Paint 在画布上写字:

 mPaint = new Paint();
 mPaint.setAntiAlias(true);
 mPaint.setDither(true);
 mPaint.setColor(0xFF000000);
 mPaint.setStyle(Paint.Style.STROKE);
 mPaint.setStrokeJoin(Paint.Join.ROUND);
 mPaint.setStrokeCap(Paint.Cap.ROUND);
 mPaint.setStrokeWidth(50);

然后,当我想擦除时,我执行以下操作:

  mPaint.setMaskFilter(null);
  mPaint.setColor(Color.TRANSPARENT);
  mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));

但它不起作用。如何在不使用 porterDuff 模式的情况下实现擦除,或者如何更改代码以使其正常工作。

就像它所做的那样,它画线,就像笔一样。但颜色不是黑色,而是灰色。

编辑:我尝试了其他方法,并将位图值保存在另一个位图中,这样当我按下擦除时,我会取回该值。这有效并删除了图纸,但问题是,在此之后,如果我想画一些东西,我画了但它消失了。这是因为位图与来自的位图不同:

  Canvas canvas = new Canvas(bitmap);

?

【问题讨论】:

    标签: android graphics canvas draw erase


    【解决方案1】:

    因此,我没有在其上添加视图的布局。我放置了一种父布局,其中包括一种布局和一种图像视图。 我将背景图像放在图像视图上。我在子布局上放了一张透明图片。然后将子布局放在前面,它现在可以工作了

    【讨论】:

    • 我也有同样的问题,你介意分享你的代码吗?谢谢
    • 好的,这是代码中最重要的部分,代码太大了,里面的所有东西:pastebin.com/6RjnZn7R
    猜你喜欢
    • 2011-04-16
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    相关资源
    最近更新 更多