Android Shader PorterDuff.Mode详解

参考

https://hencoder.com/ui-1-2/

PorterDuff.Mode

PorterDuff.Mode 是用来指定两个图像共同绘制时的颜色策略的。

它是一个 enum,不同的 Mode 可以指定不同的策略

效果示例

PorterDuff.Mode.DST_OUT


Android Shader PorterDuff.Mode详解_第1张图片
image.png

PorterDuff.Mode.DST_IN


Android Shader PorterDuff.Mode详解_第2张图片
image.png

Mode详述

PorterDuff.Mode 一共有 17 个,可以分为两类

  • Alpha 合成 (Alpha Compositing)
  • 混合 (Blending)

Alpha 合成

「PorterDuff」 并不是一个具有实际意义的词组,而是两个人的名字(准确讲是姓)。这两个人当年共同发表了一篇论文,描述了 12 种将两个图像共同绘制的操作(即算法)。而这篇论文所论述的操作,都是关于 Alpha 通道(也就是我们通俗理解的「透明度」)的计算的,后来人们就把这类计算称为Alpha 合成 ( Alpha Compositing ) 。

效果直接盗 Google 的官方文档了。

源图像和目标图像:


Android Shader PorterDuff.Mode详解_第3张图片
image.png

Alpha 合成:


Android Shader PorterDuff.Mode详解_第4张图片
image.png

Blending 混合

是 Photoshop 等制图软件里都有的那些混合模式(multiply darken lighten 之类的)。

这一类操作的是颜色本身而不是 Alpha 通道,并不属于 Alpha 合成,所以和 Porter 与 Duff 这两个人也没什么关系,不过为了使用的方便,它们同样也被 Google 加进了 PorterDuff.Mode 里。

效果依然盗 官方文档。

Android Shader PorterDuff.Mode详解_第5张图片
image.png

结论

对于 Alpha 合成类的操作,掌握他们,并在实际开发中灵活运用;而对于混合类的,你只要把它们的名字记住就好了,这样当某一天设计师告诉你「我要做这种混合效果」的时候,你可以马上知道自己能不能做,怎么做。

另外:PorterDuff.Mode 建议你动手用一下试试,对加深理解有帮助。

你可能感兴趣的:(Android Shader PorterDuff.Mode详解)