Android给我们提供了丰富的组件库来创建丰富的UI效果,同时也提供了非常方便的拓展方法。通过集成Android的系统组件,我们可以非常方便的拓展现有功能,在系统组件的基础上创建新的功能,甚至可以自己自定义一个控件。实现Android系统控件所没有的功能。自定义控件作为Android中的一个非常重要的功能,一直以来都被初学者认为是代表高手的象征。其实,自定义View并没有想象中的那么难,与其说是在自定义一个View,不如说是在设计一个图形,只有站在一个设计者的角度上,才可以更好的创建自定义View。我们不能机械的记忆所绘图的API,而是要让这些API为你所用,结合现实中的绘图方法,甚至是Photoshop的技巧,才能设计出更好的自定义View。
适当的使用自定义View,可以丰富应用程序的体验效果,但滥用自定义View则会带来适得其反的效果。一个让用户觉得熟悉的控件,才是一个好的控件。如果一味的最求炫酷的效果而创建自定义View,则会让用户感觉华而不实。
而且,在系统原生控件可以实现功能的基础上,系统也提供了主题、图片资源、各种风格来创建丰富的UI。这些控件都是经过了Adroid一代代版本迭代后的产物。即使这样,如今的版本中,依然还存在不少Bug,更不要提我们自定义的View了。特别是现在Android ROM的多样性,导致Android的适配变得越来越复杂,很难保证自定义View在其他手机上也能达到你想要的效果。
当然,了解Android系统的自定义View的过程,可以帮助我们了解系统的绘图机制。同时,在适当的情况下也可以通过自定义View来帮助我们创建更加灵活的布局。
在自定义View时,我们通常会去重写onDraw()方法来绘制View的显示内容。如果该View还需要使用wrap_content属性,那么还需要必须重写onMeasure()方法。另外,通过自定义attrs属性,还可以设置新的属性配置值。
在View中通常有以下一些比较重要的回调方法。
● onFinishInflate(): 从XML加载组件后回调。
● onSizeChanged(): 组件大小改变时回调。
● onMeasure(): 回调该方法还进行测量。
● onLayout(): 回调该方法还确定显示的位置。
● onTouchEvent(): 监听到触摸事件时回调。
当然,创建自定义View的时候,并不需要重写所有的方法,只需要重新特定条件的回调方法即可。这也是Android控件架构灵活性的体现。
通常情况下,有以下三种方法来实现自动以的控件。
● 对现有控件进行拓展
● 通过组合来实现新的控件
● 重写View来实现全新的控件