Android中View的绘制过程

Activity获得焦点时,它将被要求绘制自己的布局。每一个ViewGroup负责要求它的每一个孩子被绘制,每一个View负责绘制自己。

绘制是一个两遍的过程:一个measure pass和一个layoutpass

  1. 测量过程measure pass是在measure(int,int)中实现的,从树的顶端由上到下进行的。

在这个递归过程中,每一个View都把自己的dimension specifications传递下去。

measure pass的最后,每一个View都存储好了自己的measurements,即测量结果。

  1. 布局过程layout pass,它发生在layout(int,int)中,仍然是从上到下进行。

在这一遍中,每一个parent都负责用测量过程中得到的尺寸,把自己的所有孩子放在正确的位置。


onMeasure()方法:

onMeasure方法是测量view和它的内容,决定widthheight的,这个方法由measure(int,int)方法唤起,子类可以覆写onMeasure来提供更加精确和有效的测量。

onMeasure方法的声明如下:

protectedvoid onMeasure(int widthMeasureSpec,int heightMeasureSpec)

其中有两个输入参数widthMeasureSpec,heightMeasureSpec

分别是parent提出的水平和垂直的空间要求。


onLayout()方法:

这个方法是在layout pass中被调用的,用于确定View的摆放位置和大小。

protectedvoid onLayout(boolean changed,int left,int top,int right,int bottom)

其中的上下左右参数都是相对于parent的。

如果View含有child,那么onLayout中需要对每一个child进行布局。


scrollTo()方法:

scrollTo(intx,int y)是将View中内容滑动到相应的位置,参考的坐标系原点是parent View的左上角。

x,y分别为X轴、Y轴上的坐标。

若函数中的参数为负值,则子View中的移动方向将相反。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值