【发布时间】:2018-03-23 22:19:48
【问题描述】:
我开发了一个绘图应用程序,我需要实现橡皮擦工具来清除图片的特殊区域。橡皮擦必须不均匀地擦除一些圆形区域。这意味着 - 只有圆心应该被完全擦除,圆的边缘应该被部分擦除,带有 alpha。
为了实现这种行为,我创建了代表橡皮擦图形的图像
然后,为了擦除某些区域,我将橡皮擦的图形画在一些图片上方,如下所示:
private val picture: Bitmap
private val bgPaint = Paint()
private var eraser: Bitmap
private val eraserPaint: Paint = Paint().apply {
val mode: PorterDuff.Mode = PorterDuff.Mode.SRC_OUT
xfermode = PorterDuffXfermode(mode)
color = Color.TRANSPARENT
alpha = 0
}
init {
val options = BitmapFactory.Options()
options.inMutable = true
picture = BitmapFactory.decodeResource(resources, R.drawable.petushara, options)
eraser = BitmapFactory.decodeResource(resources, R.drawable.eraser, options)
setLayerType(View.LAYER_TYPE_SOFTWARE, bgPaint)
}
override fun draw(canvas: Canvas) {
super.draw(canvas)
canvas.drawBitmap(picture, 0f, 0f, bgPaint)
canvas.drawBitmap(eraser, 100f, 300f, eraserPaint)
}
这是我的整个视图类,不包括构造函数。我希望图片的区域会被橡皮擦擦除,但它会像这样被正方形擦除:
【问题讨论】:
标签: android canvas drawing draw