现在的位置: 首页 > 综合 > 正文

笔记99–自定义控件系列大结局三

2018年07月12日 ⁄ 综合 ⁄ 共 1416字 ⁄ 字号 评论关闭

大概分为:自定义控件外观、自定义动态控件、自定义控件后如何调整自身子控件与父控件中子控件的布局。

要想学透自定义控件,还得从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

抱歉!评论已关闭.