PorterDuff.Mode
PorterDuff.Mode 是一个枚举类,定义了多种混合模式,用于控制两个图层之间的合成效果。其中一些常用的模式包括:
- CLEAR:
清除目标图层区域。
- SRC:
保留源图层。
- DST:
保留目标图层。
- SRC_OVER:
在目标图层上方绘制源图层。
- DST_OVER:
在源图层上方绘制目标图层。
- SRC_IN:
取源图层和目标图层交集。
- DST_IN:
取目标图层和源图层交集。
- SRC_OUT:
取源图层和目标图层除交集之外的区域。
- DST_OUT:
取目标图层和源图层除交集之外的区域。
- SRC_ATOP:
取源图层和目标图层交集,但仅覆盖目标图层。
- DST_ATOP:
取目标图层和源图层交集,但仅覆盖源图层。
- XOR:
取源图层和目标图层非交集部分。
这些混合模式可以通过 PorterDuff.Mode 枚举类中的常量来使用。
Xfermode
Xfermode 是一个抽象类,它的子类实现了具体的混合算法。Xfermode 可以在绘制时控制源图层和目标图层之间的混合行为。
以下是一些常用的 Xfermode 实现类:
- AvoidXfermode:
在绘制时避免特定颜色的混合。
- PorterDuffXfermode:
使用 PorterDuff 混合模式进行混合。
- ColorMatrixColorFilter:
使用颜色矩阵进行颜色过滤。
- LightingColorFilter:
使用光照颜色进行颜色过滤。
这些 Xfermode 类可以通过 new 关键字来实例化,然后通过 Paint.setXfermode() 方法设置给画笔。
使用示例:
以下是一个简单的示例,演示了如何使用 PorterDuff.Mode 和 Xfermode 实现图形的混合效果:
Paint paint = new Paint();
Bitmap srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.source_image);
Bitmap dstBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.destination_image);
// 设置混合模式
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
// 绘制源图层
canvas.drawBitmap(srcBitmap, 0, 0, paint);
// 设置混合模式
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER));
// 绘制目标图层
canvas.drawBitmap(dstBitmap, 0, 0, paint);
// 清除混合模式
paint.setXfermode(null);
在上述示例中,首先使用 PorterDuff.Mode.DST_IN 混合模式绘制源图层,然后使用 PorterDuff.Mode.SRC_OVER 混合模式绘制目标图层。最后,通过设置 paint.setXfermode(null) 来清除混合模式,确保后续的绘制不受影响。实际应用中,可以根据具体需求选择不同的混合模式和 Xfermode 类来实现不同的混合效果。
转载请注明出处:http://www.pingtaimeng.com/article/detail/15218/Android