在自定义普通View时,会重写onDraw和onMeasure,不会重写onLayout,因为它主要是用于布局子View用的,只有在自定义ViewGroup时才会用到,本文涉及的所有代码都在文章末尾。
下面自定义一个FlexLayout,实现优先横行排列,当横行空间不够时可以换行的容器,宽高能够自适应,效果图如下
实现大致可以分为以下几个步骤:
注意:在计算的时候需要考虑自身的padding和子View的margin。
提示:默认情况下,ViewGroup中的onDraw不会调用,当给ViewGroup设置背景色之后,onDraw会被调用。
关于onMeasure可参考:自定义View之onMeasure
注释主要代码如下