博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 中 更新视图的函数ondraw() 和dispatchdraw()的区别
阅读量:5023 次
发布时间:2019-06-12

本文共 745 字,大约阅读时间需要 2 分钟。

绘制VIew本身的内容,通过调用View.onDraw(canvas)函数实现

绘制自己的孩子通过dispatchDraw(canvas)实现

 

    View组件的绘制会调用draw(Canvas canvas)方法,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()方法,然后设为背景。

转载于:https://www.cnblogs.com/Free-Thinker/p/3684361.html

你可能感兴趣的文章
文件预览工具类
查看>>
MongoDB项目中常用方法
查看>>
[收藏]ASP.NET的底层的工作机制介绍
查看>>
Ruby--Array
查看>>
面向对象编程感悟
查看>>
[NOI2015]荷马史诗
查看>>
找规律+模拟 之 codevs 1160 蛇形矩阵
查看>>
第三次java作业
查看>>
Mysql数据库操作语句总结(二)
查看>>
git开发问题! [remote rejected] master -> master (pre-receive hook declined)
查看>>
安装Oracle BPM11g R1
查看>>
OpenLDAP权限配置
查看>>
Java中Array.sort()的几种用法
查看>>
数据库启动和关闭的几种方式
查看>>
$.ajax 使用详解
查看>>
移动web资源整理
查看>>
剪切板-监视剪贴板
查看>>
获取sd卡的总大小和可用大小
查看>>
[转]国外Oracle专家服务报价
查看>>
python 面试题
查看>>