大概分为:自定义控件外观、自定义动态控件、自定义控件后如何调整自身子控件与父控件中子控件的布局。
要想学透自定义控件,还得从Android本身的控件学起,解析它的原理和重点。
一、自定义view步骤:
1、继承view或其子类
2、定义自定义属性
3、获取自定义属性,添加属性和事件
public boolean isShowText() { <span style="white-space:pre"> </span>return mShowText; } public void setShowText(boolean showText) { <span style="white-space:pre"> </span>mShowText = showText; <span style="white-space:pre"> </span>invalidate(); <span style="white-space:pre"> </span>requestLayout(); }
setShowText()调用了invalidate()和requestLayout()。这些调用关键是为了保证view行为是可靠的。你必须在改变这个可能改变外观的属性后废除这个view,这样系统才知道需要重绘。同样,如果属性的变化可能影响尺寸或者view的形状,您需要请求一个新的布局。
4、自定义绘制
绘制自定义视图最重要的一步是onDraw()。其参数是视图可以用来绘制自己的Canvas对象。android.graphics框架把绘图分成两个部分:
1)画什么,由Canvas处理
2)怎么画,由Paint处理
例如,Canvas提供画矩形的方法,而Paint定义是否用颜色填充矩形或让它为空。简言之,Canvas定义你可在屏幕上画的形状,而Paint为你画每个形状定义颜色、样式、字体等等。
二、关于优化
1、降低刷新频率:
为了提供view的运行速度,应减少频繁调用不必要的代码。从onDraw()开始调用,效果更佳。
为了使onDraw()更有依赖性,应尽可能不要频繁调用它。大部分时候调用onDraw()就是调用invalidate()的结果,所以减少不必要的调用invalidate()。有可能的,调用四种参数不同类型的invalidate(),而不是调用无参的版本。无参变量需要刷新整个view,而四种参数类型的变量只需刷新指定部分的view。
2、使用硬件加速
作为Android3.0,Android2D图表系统可通过大部分新的Android自带的GPU(图表处理单元)来增加性能。GPU硬件加速带来巨大的性能增加,但并不适合每个应用。Android框架层为你提供了控制应用程序部分硬件是否增加的能力。
要使用加速度类,请查阅Hardware Acceleration类。注意此时你的清单文件中应用目标API设为11或更高级别。
GPU非常擅长某些任务,如测量、翻转、平移位图类的图片;但也有他们不擅长的,如画直线和曲线。要想用GPU加速度类,注意扬长避短。
三、知识补充:刷新view的四个方法
1)invalidate(int l, int t, int r, int b):刷新局部,四个参数分别为上、下、左、右。
2)invalidate():刷新整个view
3)invalidate(Rect dirty)刷新一个矩形区域
4)invalidateDrawable(Drawable drawable)刷新一个特性Drawable