React-Native设置opacity 会导致子视图继承该属性

在给view 设置opacity 时,view上的子视图同时会继承opacity属性,导致出现一些问题。
解决方案
使用#RRGGBBAA或者rgba(xx,xx,xx,xx)这种格式来设置颜色值的透明度,而不是使用opacity属性。

比如:使用rgba(255,255,255,0) 此时为透明色,rgba(255,255,255,1) 则为白色

为何会出现这种情况,得从opacity属性和alpha通道来讲。
CSS中定义 opacity规定元素的不透明级别。也即会影响整个view的透明度

RGBA 颜色值是 RGB 颜色值的扩展,带有一个 alpha 通道 - 它规定了对象的不透明度。
RGBA 颜色值是这样规定的:rgba(red, green, blue, alpha)。alpha 参数是介于 0.0(完全透明)与 1.0(完全不透明)的数字。
使用RGBA只会对颜色值本身造成影响,而不会影响view上的子视图。

一个图像的每个像素都有 RGB 三个通道,后来 Alvy Ray Smith 提出每个像素再增加一个 Alpha 通道,取值为0到1,用来储存这个像素是否对图片有「贡献」,0代表透明、1代表不透明。也就是说,「Alpha 通道」储存一个值,其外在表现是「透明度」,Alpha 和透明度没啥关系。

RGBA是代表Red(红色) Green(绿色) Blue(蓝色)和 Alpha的色彩空间。虽然它有的时候被描述为一个颜色空间,但是它其实仅仅是RGB模型的附加了额外的信息。采用的颜色是RGB,可以属于任何一种RGB颜色空间,但是Catmull和Smith在1971至1972年间提出了这个不可或缺的alpha数值,使得alpha渲染和alpha合成变得可能。提出者以alpha来命名是源于经典的线性插值方程αA + (1-α)B所用的就是这个希腊字母。
线性插值是数学、计算机图形学等领域广泛使用的一种简单插值方法。

真正让图片变透明的不是Alpha 实际是Alpha所代表的数值和其他数值做了一次运算
比如你有一张图片你想抠出图片中间的一部分 在PS里你会建立一个蒙板 然后在蒙板里把不需要的地方填充成黑色 需要的留成白色 这个时候实际上是是做了一次乘法
用黑色所代表的数值0去乘以你所填充的地方 那么这个地方就变透明了

感谢:
react-native style opacity for parent and child
一个也许很傻的问题,在图像处理中alpha到底是什么?

你可能感兴趣的:(React-Native设置opacity 会导致子视图继承该属性)