1.android 在ui绘制方面上做的优化主要体现在:
1. 硬件/软件加速绘制的缓存、
2. VSYNC信号的引入、
3. 控件树代码绘制流程:加入dirty区域绘制/动画模块代码区分不改变区域大小的动画(透明度)和改变区域大小的动画(移动/缩放)
view实心空心绘制的区分、
都体现了绘制方向的优化,极大的改善了早期android在ui界面上效率底下的问题。
performDraw() 首先判断是否开启硬件加速缓存,开启走硬件绘制,主要是通过opengl指令进行绘制,否走软件绘制,软件绘制首先计算dirty rect区域,并且通过surface.lockSurface()的到对应的canvse。并且把canvse传递给Decorview的draw()。
调用view的draw()然后判断背景是否透明,透明就不用绘制背景。onDraw()绘制父类界面,dispatchDraw(),分发给子view。这里分发给ViewGroup,在viewGRoup中首先会拿到所有ziview,并且循环把canvse传给ziview,子view首先判断是否有动画需要绘制,然后对canvse进行移动tanslate,缩放等matrix处理,透明,剪切,这也是为什么传统动画不会改变view的大小尺寸位置,因为matrix是作用在canvse上的。生成bitmap buildcache缓存,
网友评论