android Draw Rect 坐标图示

转载 http://byandby.iteye.com/blog/826230


 

Android 中 更新视图的函数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()方法,然后设为背景。


构造方法。所以解决办法有两种:1) 加入上面的构造方法。2) 把DrawView自己创建。例如:draw = new DrawView(this);setContentView(draw);后面继续写你的其他代码,而不需要findViewById取得draw对象追问现在刚学android,还是尽量先从布局添加组件做起,我已经通过重写构造方法修改了这个程序,但是我不明白为什么这个构造方法要这样写,那我以后再自己定义组件,是不是还是这样写?里面的参数应该是几个?就像二楼他给出的构造方法有三个参数的。。而且我现在刚学,经常通过Alt加/来提示,但是这个却没有提示。。。。新手上路,问题较多,甚至有点幼稚,,还请你多教我。回答View类有三个构造方法,你在继承时,至少要覆写其中一个,以便创建你的自定义View。这三个构造方法分别是一个参数,两个参数和三个参数的。一个参数的:在自己new对象建立此View时调用,也就是上面的new DrawView(this)这种。二个参数的:在xml中声明自定义View时调用,就是在main.xml里声明了这种三个参数的:也是在XML中声明自定义View时调用,但与两个参数的区别是这个加入了Style样式的引用,也就是说,如果你的 main.xml里中加入了style="@style/xxx.xml",就会调用这个三参的方法。综合以上所说的,如果三个构造方法都覆写,那么你的自定义View怎么建立都行。如果只想通过java程序代码建立,那么只需要覆写一个参数的。如果只想通过XML建立,那么需要覆写两个参数的,如果XML建立还想带样式,那么就必须同时覆写三个参数的构造方法了。提问者评价非常感谢,,说的很详细我也弄明白 了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值