Android中View绘制过程(六) performDraw
来源:互联网 发布:java class.this 编辑:程序博客网 时间:2024/05/22 10:59
performTraversals()中执行了performmeasure确定了每一个View的width,和height, 就会调用performLayout,确定这些View在屏幕
的位置,调用performDraw()在每一个View将图像画在屏幕上自己layout确定的位置上就可以了。
调用如下performDraw()->draw()->drawSoftware()->从DecorView开始递归调用绘制,代码如下:
mView.draw(canvas);
ViewGroup,FrameLayout中都没有重写此方法,回到View中查看,View中代码也好长,关键是调用了一个diapatchDraw(),在ViewGroup中
重写了这个方法,关键点在于
for (int i = 0; i < childrenCount; i++) { while (transientIndex >= 0 && mTransientIndices.get(transientIndex) == i) { final View transientChild = mTransientViews.get(transientIndex); if ((transientChild.mViewFlags & VISIBILITY_MASK) == VISIBLE || transientChild.getAnimation() != null) { more |= drawChild(canvas, transientChild, drawingTime); } transientIndex++; if (transientIndex >= transientCount) { transientIndex = -1; } } final int childIndex = getAndVerifyPreorderedIndex(childrenCount, i, customOrder); final View child = getAndVerifyPreorderedView(preorderedList, children, childIndex); if ((child.mViewFlags & VISIBILITY_MASK) == VISIBLE || child.getAnimation() != null) { more |= drawChild(canvas, child, drawingTime); } }
protected boolean drawChild(Canvas canvas, View child, long drawingTime) { return child.draw(canvas, this, drawingTime); }
调用Chlid中的额draw方法,
draw方法会调用onDraw这个回调,在这个回调中可以自定义View的绘制。终于自上而下完成View的绘制。
其他说明draw方法的说明如下:
/* * Draw traversal performs several drawing steps which must be executed * in the appropriate order: * * 1. Draw the background * 2. If necessary, save the canvas' layers to prepare for fading * 3. Draw view's content * 4. Draw children * 5. If necessary, draw the fading edges and restore layers * 6. Draw decorations (scrollbars for instance) */
第一步,Draw the background是发生在onDraw之前的,还有剩下的一些画布的处理,应该注意相对回调onDraw的先后的顺序。
阅读全文
0 0
- Android中View绘制过程(六) performDraw
- Android中view绘制过程
- Android中View绘制过程(一) decorView绘制
- Android中View绘制过程(三) setContentView()到performTraversals()
- Android中View绘制过程(四) performMeasure
- Android中View绘制过程(五) performlayout
- Android中View的绘制过程
- android中View绘制过程分析
- Android中View的绘制过程
- Android中View的绘制过程
- Android中View的绘制过程
- Android中View的绘制过程
- Android View绘制过程
- Android View绘制过程
- Android View绘制过程
- Android View绘制过程
- Android View绘制过程
- Android View绘制过程
- Java 反射机制的用途和缺点
- jmeter获取cookie里面的值
- MySQL-ifnull的嵌套使用
- 【译文】热闹驱动开发
- LWip1.4.1移植到STM32平台的步骤
- Android中View绘制过程(六) performDraw
- 百度富文本编辑器集成——代码备份
- robotFramework 读取Excel文件数据
- IDEA启动Tomcat,报“LifecycleException: Failed to start component [StandardEngine[Catalina]
- 72_异常机制_Exception_Throwable_Error的概念
- Lua 常用Math库
- apache部署ssl证书
- main函数最后一行提示错误问题--仍在分析中---标点符号是完整的--
- unity3d面试题