安卓在自定义 View 或写获取圆角或者圆形图片工具的时候可能会用到这个画笔模式,但是发现之前理解的有些不正确,所以记录一下。目前只用到了两种,所以先记录一下这两种的使用,即:
PorterDuff.Mode.SRC_IN 和 PorterDuff.Mode.DST_IN,效果如下图:
DST是下层图形,SRC是上层图形。这样看来,这两种模式可以理解为上下两层图形的交集部分,只不过是交集部分显示的内容取决于上层还是下层内容的区别。DST_IN 内容取决于下层,SRC_IN 内容取决于上层。
下面来写代码看一下效果。
新建一个项目,布局放一个 ImageView 就可以了,代码如下:
//1.新建一个用于画图形的 bitmap 对象
Bitmap bitmap = Bitmap.createBitmap(200, 200, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint();
//2.先画一个红色的矩形
paint.setColor(Color.RED);
canvas.drawRect(0, 0, bitmap.getWidth(), bitmap.getHeight(), paint);
paint.setColor(Color.YELLOW);
//3.设置模式,再画一个黄色的圆
paint.setXfermode(
new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawCircle(bitmap.getWidth() / 2, bitmap.getHeight() / 2, bitmap.getHeight() / 2, paint);
//4. 将所画内容设置到 ImageView 上显示
iv1.setImageBitmap(bitmap);