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

draw() onDraw() 有区别?相关推荐

  1. Onpaint和OnDraw的区别

    (一) OnPaint 和 OnDraw (1)OnPaint是WM_PAINT消息的消息处理函数,在OnPaint中调用OnDraw,一般来说,用户自己的绘图代码应放在OnDraw中. (2)OnP ...

  2. View的draw onDraw dispatchDraw顺序

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

  3. android view组件draw onDraw,dispatchDraw

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

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

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

  5. Invalidate() UpdateData() OnPaint()与OnDraw

    Invalidate()函数 UpdateData()用法 OnPaint()与OnDraw 收藏 vc++ MFC 2010-11-08 16:42:49 阅读208 评论0   字号:大中小 订阅 ...

  6. 【VC++ MFC】vc 画笔和画刷|OnDraw()和OnPaint()

    目录 [VC++ MFC]vc 画笔和画刷 [VC++ MFC]OnDraw()和OnPaint() [VC++ MFC]vc 画笔和画刷 6,利用画笔改变线条颜色和类型: CPen pen(PS_D ...

  7. 自定义view中onMeasure、onLayout、onDraw、onFinishInflate、onSizeChanged方法调用时机

    一般自定义view或viewGroup基本上都会去实现onMeasure.onLayout.onDraw方法,还有另外两个方法是onFinishInflate和onSizeChanged. onFin ...

  8. Android自定义View全解

    目录 目录.png 1. 自定义View基础 1.1 分类 自定义View的实现方式有以下几种 类型 定义 自定义组合控件 多个控件组合成为一个新的控件,方便多处复用 继承系统View控件 继承自Te ...

  9. 国内一线互联网公司内部面试题库

    原文链接:https://github.com/JackyAndroid/AndroidInterview-Q-A/blob/master/README-CN.md 欢迎在GitHub或者掘金上关注我 ...

最新文章

  1. 《Linux内核设计与实现》读书笔记(8)--- 内核同步方法(2)
  2. 骆驼命名法,帕斯卡命名法和匈牙利命名法(转)
  3. python-基础知识
  4. 二十年编程语言风云,哪款是你的爱豆?
  5. Android之平时遇见的异常和错误总结(不断更新)
  6. java线程6种状态转换,Java线程的生命周期和各种状态转换详解
  7. mysql多线程使用一个链接_探索多线程使用同一个数据库connection的后果
  8. 开源远程访问服务器工具_为什么开源需要可访问性标准
  9. JAVASE1~5补充
  10. win7 微软语音服务器,win7 TTS修复工具(微软tts语音引擎修复)
  11. k8s之PodIP、ClusterIP和ExternalIP
  12. 语音信号处理基础(四)—语音编辑
  13. oracle触发器和存储过程的格式
  14. openshift安装文档
  15. 【程序源代码】微信小程序开发视频(2021年最新版本)
  16. 光流的概念以及 Lucas-Kanade 光流法
  17. dac芯片(国产dac芯片)
  18. Android Room 数据实体类详解
  19. IPHONE开发 VIEW之间的相互切换
  20. c语言实验3报告及答案,C语言编程实验报告3

热门文章

  1. 了解这些再用,电销机器人可能存在行业骗局
  2. Unable to get repr for <class ‘torch.Tensor‘>
  3. 高考数学数列题目解题技巧(全新的思路)
  4. Redox OS 发布 0.5 版
  5. 如何创建透明的FLASH
  6. 加强身份鉴别,宁盾双因素认证提升步长制药远程办公账号安全
  7. WinHex数据恢复笔记-数据恢复与硬件维护-MBR格式--MBR,EBR系统结构
  8. 我竟在一篇AI顶会论文里见到了小猪佩奇...
  9. 计算机硬件结构图用幻灯片做,巧用PPT制作树状结构图
  10. RestControllerAdvice作用及原理---自定义异常处理(全局异常处理)