绘制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()方法,然后设为背景。

参见http://blog.csdn.net/czh0766/archive/2010/08/05/5790295.aspx

View的draw onDraw dispatchDraw顺序相关推荐

  1. android view组件draw onDraw,dispatchDraw

    Android的view组件显示主要经过mesure, layout和draw这三个过程.在mesure阶段里调用mesure(int widthSpec, int heightSpec)方法,这个方 ...

  2. Android 自己定义View须要重写ondraw()等方法

    Android  自己定义View须要重写ondraw()等方法.这篇博客给大家说说自己定义View的写法,须要我们继承View,然后重写一些 方法,方法多多,看你须要什么方法 首先写一个自己定义的V ...

  3. view组件draw,onDraw,dispatchDraw

    Android的view组件显示主要经过mesure, layout和draw这三个过程.在mesure阶段里调用mesure(int widthSpec, int heightSpec)方法,这个方 ...

  4. draw() onDraw() 有区别?

    绘制VIew本身的内容,通过调用View.onDraw(canvas)函数实现 绘制自己的孩子通过dispatchDraw(canvas)实现 View组件的绘制会调用draw(Canvas canv ...

  5. 自定义View:测量measure,布局layout,绘制draw

    1. 什么是View 在Android的官方文档中是这样描述的:表示了用户界面的基本构建模块.一个View占用了屏幕上的一个矩形区域并且负责界面绘制和事件处理. 手机屏幕上所有看得见摸得着的都是Vie ...

  6. Android布局原理与优化

    Android布局原理与优化 目录: 绘制原理 CPU与GPU Android 图形系统的整体架构 RenderThread 硬件加速和软件绘制 invalidate软件绘制流程 invalidate ...

  7. android图形动画

    学习View的时候看到的,记录下 Android图形动画 作者 朱才:http://cnblogs.com/zhucai/ 朱才 微博:http://weibo.com/zhucai 2017/8/1 ...

  8. Android基础 硬件加速和软件绘制 invalidate和RequestLayout流程

    前言 本文介绍了硬件加速和软件绘制的区别: 并梳理了最简单的情况,在子View(非ViewGroup)调用invalidate的流程,且忽略绘图缓存,即mLayerType == LAYER_TYPE ...

  9. View的绘制流程-measure、layout、draw

    承接上文--Window.DecorView.ViewRootImp详解 我们打开一个Activity后,在ActivityThread中 的performLaunchActivity方法中,回调Ac ...

最新文章

  1. class转java_[拒绝套路,纯干货]这一百多道 Java 基础问题你掌握了吗?
  2. Chart.js-线形图分析(参数分析+例图)
  3. apache 定义日志格式 及日志记录
  4. 配置静态路由下一跳为本地出战接口和IP地址的区别
  5. oracle证书洛阳,ORACLE手工建库
  6. 网易云音乐评论催泪刷屏?我用Python抓取了1008328条热评告诉你为什么!
  7. 使用反射获得jar包中的类、方法、参数、返回值类型,然后动态加载jar包运行方法
  8. Ant :Property
  9. socket.io html5 聊天,WebSocket探讨之——socket.io搭建多聊天室
  10. 子空间方法——MUSIC算法
  11. 王码五笔98版forwin10_王码五笔98版-王码五笔98版64位 兼容王码五笔86版 - 快盘下载...
  12. 公众号运营实用小工具推荐
  13. android 焦点获取问题(手机端和TV端)
  14. 简述一下mysql与sqlyog的安装
  15. div border合并
  16. 基于龙芯CPU中标麒麟操作系统的国产半实物仿真系统ETestDEV
  17. android开发网站的流程图,Android_客户端开发流程图及案例.pdf
  18. 元宇宙”成时下热点 中国古人是如何认识“宇宙”的?
  19. JavaWeb---web
  20. 和2016年的自己握手言和

热门文章

  1. synchronized锁机制 之 代码块锁
  2. JavaScript-No.01 JavaScript实现封装、继承、多态
  3. Zend Framework 开发记录 - 代码片段–jquery–select控件
  4. 网络工程师应该掌握的知识要点
  5. 64位x86的函数调用栈布局
  6. 【PHP设计模式 08_CeLue.php】策略模式
  7. 组件与.NET互操作
  8. 如何运行PowerShell的脚本文件
  9. 用户界面草图设计工具-工具包和资源
  10. pdo 连接操作数据库