我在项目中脸球这个项目中的话我是用自定义View完成了一个下拉选择切换城市的一个控件.实现自定义View的话我们要进行计算然后布局摆放然后再绘制出来
首先我们进行计算我们先走onMeasure()这个方法调用了setMeasureDimension()通过测量父窗体的模式和对我们的宽高进行重新绘制,给我们View重新替换最新的宽高,然后调用
setMeasureDimensionRaw()这个方法将我们最新的宽高赋值给我们当前类的宽高.然后我们再去进行布局摆放,首先还是要通过onMeasure进行测量 然后将获取到的距离代替以前的距离,
然后通过setFrame()方法进行判断如果原来的值与现在的值有一个不同就会发生改变,然后再测量出最新的宽高与之前的宽高作比较,如果有一个不一样就说明它的尺寸发生了改变他就会走
invalidate(sizeChanged)这个方法,这个方法的作用就是用来重新绘制的,然后再通过setLeftTopRightBottom()设置顶点,再通过sizeChanged()这个方法来调整尺寸.接着我们就去
绘制,我们主要使用onDraw()和dispatchDraw()这两个方法,发现这两个方法是空方法需要我们覆写,我们点进ViewGroup的dispatchDraw()这个方法,发现里面有一个childer这个数组
我们通过getAndVerifyPreorderedView这个方法获取一个child,然后会调用drawChild()这个方法,这个方法里面会通过child.draw()去绘制子View onDraw()也是一样的.
网友评论