Android 自定义View----布局流程(流式布局)

本文探讨了在Android中自定义View的布局流程,重点在于如何实现一个简单的流式布局。内容包括理解布局过程,确定view的位置和尺寸,以及如何绘制一个宽度和高度相等的view内含圆形。同时,提供了手写流式布局的步骤,适用于项目实践中的参考和扩展。
摘要由CSDN通过智能技术生成

绘制一个商品属性选择的控件,需要如何绘制?

这个时候需要了解自定义view中的布局流程;

自定义veiw包括布局,绘制,触摸反馈

布局就是确定每个view的位置和尺寸,然后才能知道在哪里绘制,绘制完成后用户才能知道点哪里;

  布局整体流程:
  假设一个ViewGroup里面有n个子view 的布局过程
      分测量和布局两个流程
 
  ①测量流程:从最上面的父view往下一级一级调用每个子view的measure()方法
 
            调用之后父view会得到每个子view的尺寸,怎么得到?
            子view自己算,父view会存下来,尺寸子view自己算,位置父view算,
            算完之后把位置和尺寸(左上右下四个坐标)在第二个流程(布局流程)中使用layout()方法作为参数传给子view
 
  ②布局流程:从最上面的父view往下一级一级调用每个子view的layout()方法(在这个过程确定子view的尺寸)

必须分为两个流程,有时候测量一次无法确认子view的尺寸和位置
  个体流程(某个view)
 
  ①开发者在xml文件中设置宽高尺寸
 
  ②父view在onMeasure()方法中得到开发者设置的尺寸,再结合自己的可用空间得出对子view的尺寸要求
    这个时候会调用子view的measure()方法,(注:measure是调度方法,measure会调用自己onMeasure()方法)把这个尺寸要求传递给子view
 
  ③子view在onMeasure()方法中得到父view对自己的尺寸要求结合自己的特性来计算出自己的期望尺寸,并且按照父view的要求做修正
    如果这个子view下面还有子view,在进行自己尺寸计算前还会调用自己子view的measure()方法对自己的子view进行尺寸测量
 
  ④父view拿到子view的期望尺寸后会进一步算出子view的实际尺寸和位置,然后调用子view的layout方法
    (注:和measure同理,layout是调度方法,layout会调用自己的onLayout()方法,传递左上右下四个值)
 
  ⑤字view在自己的layout()方法中,将父view传进来的自己的实际尺寸和位置保存
    和第三步同理,如果下面还有字view,还会在onLayout()里调用每个子view的layout()把他们的尺寸传给它们
 
  draw() 是绘制的总调度,会调用onDraw()
  measure() 是测量的总调度,会调用onMeasure()
  layout() 和上面两个有区别,把父view传递过来的尺寸存下来,不止调度会做很多事情,layout()方法很少有重写的,因为修改里面super.layout的尺寸父view并不知道你修改,会造成冲突
  onLayout() 的作用是对子view进行布局,一般情况下自定义ViewGroup会从写onLayout()方法,对自己的子view进行布局

绘制一个宽高一样的view,里面绘制一个圆

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值