setAlpha与View Layer关系

时间:2021-11-27 05:15:34

如果开启了硬件加速,它们两者是没有关系的。一个先执行,一个后执行。

如果View Layer type is VIEW_LAYER_NONE, 生成display list,然后加上alpha送入GPU执行。

如果是VIEW_LAYER_SOFTWARE, 在软件层面生成layer(其实就是一个screen cache),然后加上alpha送入GPU执行。

如果是VIEW_LAYER_HARDWARE, 用GPU执行display list,然后加上alpha送入GPU执行。

如果没有动画,只是执行一遍,NONE和HARDWARE是没有区别的,甚至NONE会更快,因为不需要分配layer空间,也不需要把layer数据拷贝到GPU,所以默认是NONE的。

但如果有动画,这就有区别的,动画一般都是旋转,大小变化,alpha变化等等,是可以通过view cache(layer)+ alpha(或者其他)来组合到GPU执行的,每次动画只是在layer基础上做一次转换,GPU在处理这种情况是非常容易的。

因为考虑到layer分配和传输的消耗,只有当动画比较复杂的时候,也就是不能满足60fps的时候,才去考虑HARDWARE layer,因为在播放动画之前,需要调用所有view的buildLayer函数来生成layer。这将会有一个delay,如果生成一个displaylist所需要的数据传输不大(比如没有大图片,只是一些颜色,path之类的简单数据),HARDWARE是绝佳选择。

如果想更快的提高速度,提前buildLayer,动画的时候速度嗖嗖的。