带有PorterDuff.Mode.CLEAR的橡皮擦在画布中不起作用

时间:2012-11-05 12:04:54

标签: android graphics canvas draw erase

我需要为paint应用程序实现一个橡皮擦,它有一个画布:

Canvas canvas = new Canvas(bitmap);

其中位图是可变位图。 我在画布上用以下画面写道:

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

1 个答案:

答案 0 :(得分:0)

因此,我没有添加视图的布局。我把一个父布局包括一个布局和一个imageview。 我把背景图片放在imageview上。我在子布局上放了一个透明的图片。然后将子布局放在前面,它现在正在工作