十、自定义View之瀑布流式标签(持续更新中。。。。)

最近项目中有这样的需求,所以我决定写一个FlowLayout,并且记录下来写的过程。

既然是FlowLayout,那么自然是继承ViewGroup的自定义View。

继承ViewGroup的自定义控件,需要重写两个方法:onMeasure() 和 onLayout()

onMeasure():测量,主要作用是测量子View的宽高,以及设置自己的宽高。

测量 = 测量模式 + 测量值。

测量模式:1.EXACTLY :子控件的宽高为具体值或者match_parent,如100dp

                   2.AT_MOST:子控件的宽高为wrap_content

                    3.UNSPCIFIED:很少用到,子控件想要多大就多大。

onLayout():设置子View的位置。

(在ViewGroup中,子View.getLayoutParams()得到的LayoutParams是其父控件类型的LayoutParams,如子View在LinearLayout中,那么它获得的LayoutParams就是LinearLayout.LayoutParams)

我们的FlowLayout使用的是系统的MarginLayoutParams。

对于自定义View的三个构造方法,前面的文章应该已经说过了,但是再写一遍,也能加深印象。

自定义View的三个构造方法

1.只有一个参数的构造方法:当我们在代码中new FlowLayout时会调用该构造方法

2.两个参数的构造方法,当我们在xml文件中使用该控件时,调用该方法,attrs是在xml文件中设置的属性。

3.三个参数的构造方法,当我们在xml文件中使用该控件,并且使用了自定义属性时,调用该构造方法。

你可能感兴趣的:(十、自定义View之瀑布流式标签(持续更新中。。。。))