大家都知道View的生命周期为
OnMeasure -> onLayout -> draw
OnMeasure
顾名思义,是用来测量控件的高度和宽度,如果是ViewGroup,还需要算出子空间的高度宽度。onMeasure的过程需要测量多次才会进入下一步骤。
** onLayout**
通过OnMeasure可以对当前界面所有控件的高度和宽度都有了一个定义,那么我们通过onLayout来实现把控件放在界面上的哪个地方
** draw **
前期准备完成,我们开始调度cpu来绘制界面。显示给操作用户。
我们在实现自定义控件的时候,改变其中的属性,需要重新绘制界面。
这时我们需要碰到两种方法invalidate()和requestLayout();
** invalidate **
这个时候表示我需要重新绘制界面,但是不会重新布局,只会调用draw的方法。我们其实在Activity设置控件的隐藏和显示时都会默认的调用这个方法,只是被封装了。
requestLayout
这个时候表示我需要重新测量界面和布局界面以及绘制,控件的生命周期重新走一遍,其实在Activity设置控件的大小或者设置控件位置属性都会默认的调用这个方法,如果我们自定义控件,在改变一些属性时可能需要手动调用此方法。