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方法,如下所示:
- 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
Android 颜色渲染(九) PorterDuff及Xfermode详解相关推荐
- Android 颜色渲染(二) 颜色区域划分原理与实现思路
在前面的系列我已经将Android中颜色渲染的原理及使用做了一个整体上概述. 现在开始根据一个比较复杂的实现进行具体的分析,这就是PhotoShop中的调色板应用 首先还是看一下最终的实现效果: ...
- Android 8.0学习(32)---Android 8.0源码目录结构详解
Android 8.0源码目录结构详解 android的移植按如下流程: (1)android linux 内核的普通驱动移植,让内核可以在目标平台上运行起来. (2)正确挂载文件系统 ...
- Android性能优化之APK瘦身详解(瘦身73%)
image 公司项目在不断的改版迭代中,代码在不断的累加,终于apk包不负重负了,已经到了八十多M了.可能要换种方式表达,到目前为止没有正真的往外推过,一直在内部执行7天讨论需求,5天代码实现的阶段. ...
- Android 各大厂面试题汇总与详解(持续更新)
介绍 目前网络中出现了好多各种面试题的汇总,有真实的也有虚假的,所以今年我将会汇总各大公司面试比较常见的问题,逐一进行解答.会一直集成,也会收集大家提供的面试题,如有错误,请大家指出,经过排查存在,会 ...
- Android进阶笔记:Messenger源码详解
Messenger可以理解为一个是用于发送消息的一个类用法也很多,这里主要分析一下再跨进程的情况下Messenger的实现流程与源码分析.相信结合前面两篇关于aidl解析文章能够更好的对aidl有一个 ...
- android中怎么网络判断,Android中判断网络是否连接实例详解
Android中判断网络是否连接实例详解 在android中,如何监测网络的状态呢,这个有的时候也是十分重要的,方法如下: public class ConnectionDetector { priv ...
- 【转】Android APK反编译就这么简单 详解(附图)
转自:http://blog.csdn.net/vipzjyno1/article/details/21039349/ [置顶] Android APK反编译就这么简单 详解(附图) 分类: and ...
- android组件用法说明,Android第三方控件PhotoView使用方法详解
Android第三方控件PhotoView使用方法详解 发布时间:2020-10-21 15:06:09 来源:脚本之家 阅读:74 作者:zhaihaohao1 PhotoView的简介: 这是一个 ...
- android 截图 listview,Android屏幕及view的截图实例详解
Android屏幕及view的截图实例详解 屏幕可见区域的截图 整个屏幕截图的话可以用View view = getWindow().getDecorView(); public static Bit ...
最新文章
- Codeforces Round 542 (Div. 2)
- python面向对象编程从零开始_Python面向对象编程从零开始,从没对象到有对象
- centos-修改分辨率
- WebService学习总结(1)——WebService相关概念
- Cocos2d BMFont解析
- virsh链接虚拟机_KVM 通过virsh console连入虚拟机
- 如何简单粗暴地上手 TensorFlow 2.0?
- [转]编程之美数组分割问题
- LeetCode 207. 课程表(广度优先遍历)
- jzoj1212 重建道路
- php pwuj 挂马,网站挂马原理及实战
- 从零搭建自动化测试平台
- java 物体移动不了总结_java9迁移注意问题总结
- for循环下标 shell_Shell数组操作 带下标遍历
- 沈定刚,雷柏英,李超 | Cell Press Live:人工智能在医学影像中的应用
- chrome浏览器手机模式下不显示鼠标
- CSS图片裁剪:实现切角效果
- 文库网站在线预览的真实html,墨涩网 - amWiki 轻文库源码+Atom网站搭建教程——墨涩网...
- 英文字母html,利用HTML5实现英文字母ABCD动画特效
- maven-项目中引入依赖包
热门文章
- 防篡改对象之密封对象
- 深入react技术栈(10):受控组件和非受控组件
- Taro+react开发(25)三元
- [html] 能否做到禁止打印页面?如果可以那要怎么做?
- [css] 怎么实现移动端的边框0.5px?
- [css] 你用过css的tab-size属性吗?浏览器默认显示tab为几个空格?
- 前端学习(1350):用户的增删改查操作7增删改查
- 前端学习(1309):创建网站服务器
- 第十二期:七种优秀的浏览器兼容性测试工具
- 17. 框架标签及其应用实例