android自定义view绘制的一般过程
来源:互联网 发布:水厂设计软件 编辑:程序博客网 时间:2024/05/05 02:10
android自定义view绘制的一般过程主要在draw()函数中:
* 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过程中主要是先画Drawable背景,对drawable调用setBounds()然后是draw(Canvas c)方法.需要注意的是背景drawable的实际大小会影响view组件的大小,drawable的实际大小通过getIntrinsicWidth()和getIntrinsicHeight()获取,当背景比较大时view组件大小等于背景drawable的大小,
画完背景后,draw过程会调用onDraw(Canvas canvas)方法,然后就是dispatchDraw(Canvas canvas)方法, dispatchDraw()主要是分发给子组件进行绘制,我们通常定制组件的时候重写的是onDraw()方法。值得注意的是ViewGroup容器组件的绘制,当它没有背景时直接调用的是dispatchDraw()方法, 而绕过了draw()方法,当它有背景的时候就调用draw()方法,而draw()方法里包含了dispatchDraw()方法的调用。因此要在ViewGroup上绘制东西的时候往往重写的是dispatchDraw()方法而不是onDraw()方法,或者自定制一个Drawable,重写它的draw(Canvas c)和 getIntrinsicWidth(),getIntrinsicHeight()方法,然后设为背景。
view的onDraw()部分源码:
// skip step 2 & 5 if possible (common case)
final int viewFlags = mViewFlags;
boolean horizontalEdges = (viewFlags & FADING_EDGE_HORIZONTAL) != 0;
boolean verticalEdges = (viewFlags & FADING_EDGE_VERTICAL) != 0;
if (!verticalEdges && !horizontalEdges) {
// Step 3, draw the content
if (!dirtyOpaque) onDraw(canvas);
// Step 4, draw the children
dispatchDraw(canvas);
// Step 6, draw decorations (scrollbars)
onDrawScrollBars(canvas);
- android自定义view绘制的一般过程
- android绘制view的过程(自定义view一)
- android绘制view的过程(自定义view一)
- android绘制view的过程(自定义view一)
- Android自定义View的绘制
- android--自定义view的绘制
- android view的绘制过程
- Android View的绘制过程
- Android view的绘制过程
- android绘制view的过程
- Android View的绘制过程
- Android 自定义View之View的绘制
- Android 自定义View基础-View的绘制
- Android自定义view的一般步骤
- Android自定义View的一般步骤
- Android中View的绘制过程 onMeasure方法简述 附有自定义View例
- Android中View的绘制过程 onMeasure方法简述 附有自定义View例子
- Android中View的绘制过程 onMeasure方法简述 附有自定义View例子
- Win8 C#画条形图,饼状图,曲线图的源代码
- 韩顺平_php从入门到精通_视频教程_第2讲_html运行原理②_html文件基本结构_html元素和属性_学习笔记_源代码图解_PPT文档整理
- GetMessage()函数与PeekMessage()函数的区别
- MFC,STL,COM,ATL中使用了哪些设计模式
- 应用 Valgrind 发现 Linux 程序的内存问题
- android自定义view绘制的一般过程
- 一个电子商务软件的分析设计
- ECM 之 DM_WORKFLOW_E_TRANS_MAX_OUTPUT_CNT_EXCEEDED 错误分析与解决
- 手机散热处理专题-石墨片
- Java 常用正则表达
- MTK6577 &7系列平台能做什么,怎么做
- IOS开发之──事件响应
- tomcat问题
- 供应商的管理