1.自定位View
在onMeasure(int widthMeasureSpec,int heightMeasureSpec)方法中的这两个参数,包括测量模式和测量的信息。int类型占用32个bit,这里将前2个bit用于区分不同的布局模式,后面30个bit存放的是尺寸的数据。
可以通过MeasureSpec.getMode(widthMeasureSpec) MeasureSpec.getSize(widthMeasureSpec)获取到测量方式和尺寸数据。这里的尺寸是父view提供的参考大小。
UNSPECIFIED:父容器没有对当前View有任何限制,当前View可以任意去尺寸。
EXACTLY:当前尺寸就是当前View应该取的尺寸。
AT_MOST:当前尺寸是当前View能取的最大尺寸。
match_parent-->EXACTLY。match_parent就是要利用父View提供的所有的剩余空间,父View的剩余空间是确定的。
wrap_content-->AT_MOST:当前View大小设置为包裹我们的View内容,尺寸大小就是父View提供的作为参考的尺寸,不超过这个尺寸就可以。
固定尺寸-->EXACTLY:
2.自定位ViewGroup
自定义ViewGroup还需要兼顾子View:首先要知道子View的大小,才知道当前的ViewGroup设置多大去容纳他们。根据子View的大小,以及我们的ViewGroup要实现的功能,决定ViewGroup的大小。大小测量后就考虑如何摆放了,垂直摆放或者是一个挨着一个摆放,或者按照先后顺序一个叠着一个放。最后把自己已有的空间分割成大大小小的一份,然后把子View对号入座放进去。
扫描二维码关注公众号,回复:
3572088 查看本文章