Android 颜色渲染(九) PorterDuff及Xfermode详解

之前已经讲过了除ComposeShader之外Shader的全部子类, 在讲ComposeShader(组合渲染)之前, 由于构造ComposeShader需要 PorterDuffXfermode或者PorterDuff.Mode作为参数,所以在此先详细地了解下这两个类的作用,这对之后的绘图会有很大的帮助:

在讲具体的使用之前补充一点知识,这就是 ProterDuff的由来:

相信大多数人看到这个ProterDuff单词很奇怪了吧,这肿么个意思呢,然后就用有道啊,金山啊开始翻译,但是翻译软件给出的结果肯定还是 ProterDuff或者"未找到".

这是神马情况呢?因为ProterDuff是两个人名的组合: Tomas Proter和 Tom Duff. 他们是最早在SIGGRAPH上提出图形混合概念的大神级人物. 有兴趣的童靴们可以自己查下并深入了解,在此不再做过多描述.


利用ProterBuff.Mode我们可以完成任意2D图像测操作, 比如涂鸦画板应用中的橡皮擦效果,绘制各种自定义的进度,等等很强大的效果,下面请看具体的介绍:

1. Xfermode:

Xfermode有三个子类 :

AvoidXfermode指定了一个颜色和容差,强制Paint避免在它上面绘图(或者只在它上面绘图)。

PixelXorXfermode当覆盖已有的颜色时,应用一个简单的像素异或操作。

PorterDuffXfermode 这是一个非常强大的转换模式,使用它,可以使用图像合成的16条Porter-Duff规则的任意一条来控制Paint如何与已有的Canvas图像进行交互。

要应用转换模式,可以使用setXferMode方法,如下所示:

[java] view plain copy
  1. AvoidXfermodeavoid=newAvoidXfermode(Color.BLUE,10,AvoidXfermode.Mode.AVOID);borderPen.setXfermode(avoid);

2.PorterDuff:



首先看一下效果图(来自ApiDemos/Graphics/XferModes)



从上面我们可以看到PorterDuff.Mode为枚举类,一共有16个枚举值:

1.PorterDuff.Mode.CLEAR

所绘制不会提交到画布上。
2.PorterDuff.Mode.SRC

显示上层绘制图片
3.PorterDuff.Mode.DST

显示下层绘制图片
4.PorterDuff.Mode.SRC_OVER

正常绘制显示,上下层绘制叠盖。
5.PorterDuff.Mode.DST_OVER

上下层都显示。下层居上显示。
6.PorterDuff.Mode.SRC_IN

取两层绘制交集。显示上层。
7.PorterDuff.Mode.DST_IN

取两层绘制交集。显示下层。
8.PorterDuff.Mode.SRC_OUT

取上层绘制非交集部分。
9.PorterDuff.Mode.DST_OUT

取下层绘制非交集部分。
10.PorterDuff.Mode.SRC_ATOP

取下层非交集部分与上层交集部分
11.PorterDuff.Mode.DST_ATOP

取上层非交集部分与下层交集部分
12.PorterDuff.Mode.XOR

异或:去除两图层交集部分
13.PorterDuff.Mode.DARKEN

取两图层全部区域,交集部分颜色加深
14.PorterDuff.Mode.LIGHTEN

取两图层全部,点亮交集部分颜色
15.PorterDuff.Mode.MULTIPLY

取两图层交集部分叠加后颜色
16.PorterDuff.Mode.SCREEN

取两图层全部区域,交集部分变为透明色

更多相关文章

  1. 使用selector修改TextView中字体的颜色
  2. Android(安卓)DatePicker,NumPicker解析(分割线颜色及调整大小)
  3. Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高
  4. 手把手教你打造一个Material Design风格的App(一)
  5. 关于Android的TimePicker和DatePicker一些简单的使用问题
  6. android snackbar 使用
  7. Android(安卓)Shape使用
  8. android中添加AT命令流程(转载)
  9. UI组件之TextView及其子类(一)TextView和EditText

随机推荐

  1. Android证书创建之 keytool 错误:java.io.
  2. 【Android】自带Theme
  3. Android通过源码编译apk获得系统权限
  4. Android几种动画的总结(MaterialAnimatio
  5. Android(安卓)layout布局属性、标签属性
  6. No resource found that matches the giv
  7. Android使用MediaCodec将YUV硬编成H264
  8. ok6410 android driver(11)
  9. 解决 Android(安卓)模拟器 无法上网问题
  10. RelativeLayout布局及属性