dispatchDraw
来源:互联网 发布:js 获取iframe 对象 编辑:程序博客网 时间:2024/06/04 19:14
Android的view组件显示主要经过mesure, layout和draw这三个过程。在mesure阶段里调用mesure(int widthSpec, int heightSpec)方法,这个方法是final不能被重写,在这个过程里会调用onMesure(int widthSpec, int heightSpec)方法。当组件设置好大小后,调用final layout(int l, int t, int r, int b)方法进行布局,在这个过程里会调用onLayout(boolean changed, int l, int t, int r, int b)方法,所以处理组件的布局通常要重写onMesure和onLayout这两个方法。
View组件的绘制会调用draw(Canvas canvas)方法,这个方法在源代码里看不到在哪里调用...draw过程中主要是先画Drawable背景,对drawable调用setBounds()然后是draw(Canvas c)方法.有点注意的是背景drawable的实际大小会影响view组件的大小,drawable的实际大小通过getIntrinsicWidth()和getIntrinsicHeight()获取,当背景比较大时view组件大小等于背景drawable的大小,不过俺没有在源代码里找到布局时调用过 getIntrinsicWidth()和getIntrinsicHeight()方法...
画完背景后,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组件的绘制会调用draw(Canvas canvas)方法,这个方法在源代码里看不到在哪里调用...draw过程中主要是先画Drawable背景,对drawable调用setBounds()然后是draw(Canvas c)方法.有点注意的是背景drawable的实际大小会影响view组件的大小,drawable的实际大小通过getIntrinsicWidth()和getIntrinsicHeight()获取,当背景比较大时view组件大小等于背景drawable的大小,不过俺没有在源代码里找到布局时调用过 getIntrinsicWidth()和getIntrinsicHeight()方法...
画完背景后,draw过程会调用onDraw(Canvas canvas)方法,然后就是dispatchDraw(Canvas canvas)方法, dispatchDraw()主要是分发给子组件进行绘制,我们通常定制组件的时候重写的是onDraw()方法。值得注意的是ViewGroup容器组件的绘制,当它没有背景时直接调用的是dispatchDraw()方法, 而绕过了draw()方法,当它有背景的时候就调用draw()方法,而draw()方法里包含了dispatchDraw()方法的调用。因此要在ViewGroup上绘制东西的时候往往重写的是dispatchDraw()方法而不是onDraw()方法,或者自定制一个Drawable,重写它的draw(Canvas c)和getIntrinsicWidth(),getIntrinsicHeight()方法,然后设为背景。
阅读全文
0 0
- dispatchDraw
- onDraw dispatchDraw
- android4.0.4 dispatchDraw NullPointerException
- view: draw,onDraw,dispatchDraw
- Android中dispatchDraw分析
- view组件draw,onDraw,dispatchDraw
- view组件draw,onDraw,dispatchDraw
- view组件draw,onDraw,dispatchDraw
- ondraw() 和dispatchdraw()的区别
- view组件draw,onDraw,dispatchDraw
- Android_ondraw()和dispatchdraw()的区别
- ondraw() 和dispatchdraw()的区别
- onMeasure、onLayout、dispatchDraw调用顺序
- view组件draw,onDraw,dispatchDraw
- ondraw() 和dispatchdraw()的区别
- ondraw() 和dispatchdraw()的区别 .
- ondraw() 和dispatchdraw()的区别
- dispatchDraw,dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent,onMesure,onLayout
- 使用Onvif协议进行设备RTSP地址获取
- 电子词典C++实现
- 55.jump游戏
- ACM常用C++模板 包括常用头文件
- iOS 使用UICountingLabel实现数字变化的动画效果
- dispatchDraw
- Nginx Tomcat
- 我的故事和租房子的故事
- android Shape使用
- HDU6092-Rikka with Subset
- win7系统IE11浏览器导致页面无法点选日期解决方法:
- 网易编程:魔力手环
- ubuntu12.04下Python 3.5.3 +OpenCV 3.2.0编译环境搭建
- java中Map,List与Set的区别