Xfermode样式
Paint的Xfermode Google官方ApiDemos中16种样式效果如下图
然后我写的demo中18样式如下
可以看到除了ADD,OVERLAY这两种ApiDemos没有绘制的模式外,其中CLEAR这种模式跟官方的不一样,这是什么原因呢?
其实是因为ApiDemos中的targetSdkVersion为23而我的为30,只要修改一下两者表现就一样了
DST与SRC怎么区分?
DST:先绘制的图形
SRC:后绘制的图形
Xfermode怎么理解?
Xfermode是Paint绘制的一种绘制模式,可以看作是SRC图形与DST图形根据Xfermode来做不同的叠加运算
Xfermode效果达不到预期?
图形根据Xfermode做不同叠加运算,但它们的运算还需要满足一些条件
1.绘制的图形须在同一层(saveLayer会使图层变化)
2.图形相交部分才做运算(Bitmap看作是一种图形所有Bitmap整个区域都会参与计算包括透明像素)
3.图形相交之外的部分根据Xfermode不同表现不同
请注意第二条这个很容易被忽略掉
不管是官方还是我的demo中,DST、SRC相交的部分都不仅仅是图形相交的部分
如果不好理解咱们来看下面这张图
这张图与上面demo中的SRC,DST所占大小实际上是不同的
在上面的demo中SRC,DST大小分别为
而后面SRC,DST大小分别为
所以他们参与的计算部分实际上是不同的
因此后面的SRC,DST相交部分的计算与demo中的SRC,DST表现一样,而不相交的部分因为没有参与计算所以表现是不同的
4.背景色也可以参与叠加运算
Canvas是有图层概念的我们的背景色以及onDraw方法中绘制的图形都在一个图层,所以在默认的图层中(即不调用saveLayer方法)绘制的图形使用Xfermode会与背景色一起叠加运算,这个时候叠加区域会变成黑色,这个时候我们需要设置一下图层支持硬件加速setLayerType(LAYER_TYPE_HARDWARE, paint)