需求和问题
需求是在一个自定义view中放置两张重叠的bitmap,然后局部擦除顶部的那一张图,以此可以看到底部的图片。
大致思路:
//底部的图片已经通过其他方式绘制完成
canvas.drawBitmap(topBitmap, 0f, 0f, null)
// 画笔的建立需要在onDraw外面执行,这里为了叙述方便才放在这里
val clearPaint = Paint()
clearPaint.xfermode = PorterDuffXfermode(PorterDuff.Mode.XOR)
canvas.drawCircle(x, y, r, clearPaint)
但是并没有出现预期的效果,在drawCircle的地方,显示的背景为黑色,并不能看到底部的背景图。
网上的说法
1. 图片的格式问题,JPEG不支持透明。
但是这里并没有用到图片本身的透明属性,而是将整个canvas或是bitmap“设置为透明”。另外,按照这种说法,所有设置透明度时只能使用png格式的图片,不符合现实状况,也不利于用户使用。
2. Bitmap.Config
顺便复习一下
Possible bitmap configurations. A bitmap configuration describes how pixels are stored. This affects the quality (color depth) as well as the ability to display transparent/translucent colors.
这个属性代表了Bitmap可以的配置情况。一个配置描述的是这些像素信息是如何存储