网站建设 商城,江苏企业网站建设,html网页设计主题大全,西安做推广优化的公司Android 颜色渲染(九) PorterDuff及Xfermode详解之前已经讲过了除ComposeShader之外Shader的全部子类, 在讲ComposeShader(组合渲染)之前, 由于构造ComposeShader需要 PorterDuffXfermode或者PorterDuff.Mode作为参数,所以在此先详细地了解下这两个类的作用,这对之后的绘图会…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 plaincopy AvoidXfermode avoid new AvoidXfermode(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 取两图层全部区域交集部分变为透明色 转载于:https://www.cnblogs.com/caixuejian/p/4037075.html