onDraw(canvas)和dispatchDraw(canvas)方法

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

时间: 2025-01-01 10:51:22

onDraw(canvas)和dispatchDraw(canvas)方法的相关文章

获取canvas-Android自定义View怎样获取到onDraw(Canvas canvas)里的canvas对象啊?

问题描述 Android自定义View怎样获取到onDraw(Canvas canvas)里的canvas对象啊? 自定义了一个View,在初始化时该View会先画一部分图形,然后连接服务器,收到服务器的数据后,再将这些数据画出来,但是原来的图形不变,所以,我的想法是,获取到OnDraw()里的canvas对象,然后用它画图,再更新(即调用该View的postInvalidate()).我在自定义View的类里,设置了一个Canvas变量can,在onDraw(Canvas canvas )方法

js+canvas绘制矩形的方法_javascript技巧

本文实例讲述了js+canvas绘制矩形的方法.分享给大家供大家参考,具体如下: 运行效果截图如下: 具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtm

js+canvas绘制五角星的方法_javascript技巧

本文实例讲述了js+canvas绘制五角星的方法.分享给大家供大家参考,具体如下: 运行效果截图如下: 具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xht

java ondraw重绘有哪些方法可以使用

问题描述 java ondraw重绘有哪些方法可以使用 安卓开发中要用到ondraw重绘机制,不知道有哪些方法可以用,最好举个例子,谢谢~ 解决方案 invalidate和postinvalidate,当然,也可以通过发消息实现重绘界面咯

Android实现带有边框的ListView和item的方法_Android

本文实例讲述了Android实现带有边框的ListView和item的方法.分享给大家供大家参考,具体如下: 想为ListView和item四周添加边框有两种方法: 1.贴一张带有边框效果的背景图 2.自定义Draw的方法 第一种方法较第二种方法更耗系统资源,但是用法简单,只需要一张图设置为相应控件的背景即可,而第二种灵活性好些. 这次是实现带有边框的ListView和item,为此写个简单Demo 学习学习 先看下Demo运行效果吧 下面是主要代码,主要是用到Canvas.drawLine(.

Android实现带有边框的ListView和item的方法

本文实例讲述了Android实现带有边框的ListView和item的方法.分享给大家供大家参考,具体如下: 想为ListView和item四周添加边框有两种方法: 1.贴一张带有边框效果的背景图 2.自定义Draw的方法 第一种方法较第二种方法更耗系统资源,但是用法简单,只需要一张图设置为相应控件的背景即可,而第二种灵活性好些. 这次是实现带有边框的ListView和item,为此写个简单Demo 学习学习 先看下Demo运行效果吧 下面是主要代码,主要是用到Canvas.drawLine(.

Anroid ListView分组和悬浮Header实现方法_Android

之前在使用iOS时,看到过一种分组的View,每一组都有一个Header,在上下滑动的时候,会有一个悬浮的Header,这种体验觉得很不错,请看下图: 上图中标红的1,2,3,4四张图中,当向上滑动时,仔细观察灰色条的Header变化,当第二组向上滑动时,会把第一组的悬浮Header挤上去. 这种效果在Android是没有的,iOS的SDK就自带这种效果.这篇文章就介绍如何在Android实现这种效果. 1.悬浮Header的实现 其实Android自带的联系人的App中就有这样的效果,我也是把

Anroid ListView分组和悬浮Header实现方法

之前在使用iOS时,看到过一种分组的View,每一组都有一个Header,在上下滑动的时候,会有一个悬浮的Header,这种体验觉得很不错,请看下图: 上图中标红的1,2,3,4四张图中,当向上滑动时,仔细观察灰色条的Header变化,当第二组向上滑动时,会把第一组的悬浮Header挤上去. 这种效果在Android是没有的,iOS的SDK就自带这种效果.这篇文章就介绍如何在Android实现这种效果. 1.悬浮Header的实现 其实Android自带的联系人的App中就有这样的效果,我也是把

Android群英传笔记——第三章:Android控件架构与自定义控件讲解

Android群英传笔记--第三章:Android控件架构与自定义控件讲解 真的很久没有更新博客了,三四天了吧,搬家干嘛的,心累,事件又很紧,抽时间把第三章大致的看完了,当然,我还是有一点View的基础的,可以先看下我之前写的几篇基础的View博客 Android绘图机制(一)--自定义View的基础属性和方法 Android绘图机制(二)--自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解 Android绘图机制(三)--自定义View的三种实现方式以及实战