-
多个控件组合成一个新的控件,比如继承LineaLayout;
-
继承View控件,根据View的绘制流程重新进行实现;
另外,我们实现自定义View的好处有哪些呢?
自定义View实际上也就是一个功能类,除了绘制UI以外,还可以封装一定的业务逻辑,这样我们只需要对外提供一些接口,调用方就像使用其它类一样调用即可。
举个例子,我们常见的adapter的item布局中:
左边的图片和右边的文字可以做成一个新的View控件,这样如果调用的地方多了,可以节省不少的代码量,因为实现的逻辑都在新的控件中处理了。
这个也就是我们平时对UI进行重构所用到的方法之一了。很多项目接手过来时,里面的UI代码可能都是从一个地方实现后,拷贝到另一个地方使用。没有进行View控件封装的后果就是代码冗余,阅读困难,而且View的功能如果要变动的话,所有调用的地方都得变动。严重违背代码设计的开闭原则。
=================================================================
- measure()
作用:测量View的宽高
相关函数:measure(),setMeasuredDimension(),onMeasure()
- layout()
作用:计算当前View和子View的位置
相关函数:layout(),onLayout(),setFrame()
- draw()
作用:绘制View图形
相关函数:draw(),onDraw()
用一种很形象的说法来说明View的绘制:
meaure决定用多大的盘子装菜,layout决定怎么摆盘好看,而draw就是服务员,把上面的东西给客人摆好。
============================================================
借用网络图片说明这个问题,对我们绘制UI理解有帮助: