View中的draw和onDraw的区别

转载 2015年07月07日 22:06:26

1.大概扫一下源码就可以明白,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)
在第三步的时候,它就会调用onDraw()方法,来绘制view的内容。也就是draw会调用onDraw。

所以看需要,一般情况下,直接用onDraw绘制view的content就可以了,如果绘制多一点的内容,可以调用draw(),不过Android官方推荐用只用onDraw就可以了。“When implementing a view, do not override this method; instead, you should implement onDraw”



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


3.ondraw() 和dispatchdraw()的区别  

 绘制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/fener10289/article/details/8231712

View中的draw和onDraw的区别

大概扫一下源码就可以明白,draw()这个函数本身会做很多事情,          *      1. Draw the background          *      2. If nece...

View中的draw和onDraw,dispatchDraw的区别

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

android自定义view三(draw和ondraw)

在上篇博客中介绍onMeasure(),onLayout()方法的和内部实现。1、draw()和onDraw()的区别1、draw()方法详解在自定义View的时候可以重写draw和onDraw()方...

OnDraw与OnPaint有什么区别

  • 2012年03月10日 22:19
  • 6KB
  • 下载

OnPaint()与OnDraw()的区别

  • 2012年07月31日 09:27
  • 17KB
  • 下载

Android 利用OnDraw实现自定义View

自定义View的实现方式大概可以分为三种,自绘控件、组合控件、以及继承控件。本文介绍几种...

自定义View之Ondraw源码

  • 2016年12月18日 16:52
  • 3KB
  • 下载

自定义View onDraw方法不被执行

一.引言: 想必大家以前也遇到過這個問題:出於項目的需要,我們有時需要 新建一個直接或者間接繼承View的類,以便複寫View提供的onDraw()方法,但有時我們反而得不到我們想要的結果,今天就說...

View的onDraw函数不被调用 .

参考: http://blog.sina.com.cn/s/blog_4b50130d0100u0uk.html http://blog.csdn.net/hearrt/article/detai...
  • neiloid
  • neiloid
  • 2012年10月04日 12:29
  • 8678

Android 自定义View总结 —— onDraw

Android 自定义View onDraw解析,实现简单示例(画圆)
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:View中的draw和onDraw的区别
举报原因:
原因补充:

(最多只允许输入30个字)