首先在文章开头进行声明,以下知识点讲解全部来自谷歌官方指导文档的翻译,一方面给自己做笔记,强化知识点,另一方面照顾那些英语不太好的程序猿朋友,如果文章中有翻译不到位的,敬请大家批评和指正,我会及时修正,希望和大家一起进步。
安卓框架提供了大量的视图组件类来与用户进行交互和显示各种类型的数据,但是有些时候,这些内部提供的视图类并不能满足你应用的独特的要求。那么本节将会告诉你如何创建你自己的健壮和可重用的可视化组件。
课程列表
1、 创建视图类
创建一个和内建视图表现相同的类,并且有自定义的视图,并且能够被adt布局编辑器支持。
2、 自定义绘制
通过android绘图系统来绘制一个不一样的视图
3、 制作交互的视图
用户希望视图能够流畅和自然的响应用户的输入手势。那么本节将讨论如何使用手势监测,物理特征以及动画来让你的用户界面给人更加专业的感觉。
4、 视图优化
不论你的ui做地多么漂亮,如果它不能持续流畅的运行,用户也是不可能喜欢的。因此,应该学会怎么避免一些通常的性能问题,以及如何使用硬件回事来让你的自定义视图组件运行更加流畅。
一 、 创建视图类
一个好的设计视图与其实所有设计优秀的类一样,他们都封装了一些特殊的功能,并提供一个更简单的使用接口。它能更加的利用cpu和内存,等。但是除了需要设计优良外,一个自定义视图还需要满足如下:
· 符合android的标准
· 提供android xml 布局的自定义样式属性
· 能够正常发送事件
· 能够兼容多个android版本。
android的框架层为我们提供了一个基类集和xml标签,可以帮助我们完成满足以上要求的视图类。那么,接下来,我们将讨论如何利用android框架层来创建一个视图类最核心的功能。
创建一个view的子类
android应用框架层的视图类都继承自view,因此我们的自定义类可以直接继承自view,当然你也可以节约时间,直接继承view的子类,例如Button.
为了允许android develop tools能够与你的视图进行交互,至少你应该创造一个构造方法,并且传入Context和AttributeSet对象作为参数,这样,布局编辑器就能创建和编辑你的视图实例了。
class PieChart extends View {
public PieChart(Context ctx, AttributeSet attrs) {
super(ctx, attrs);
}
}
定义自定义属性
增加一个内部的视图到你的用户接口,你需要在xml元素里面指定它,并通过属性元素来控制它的显示以及行为。一个好的自定义视图可以被通过xml文件来进行增加和样式化。为了能够使你的应用也具有以上特征,你需要按照如下:
· 在<declare-styleable>资源元素中定义你的自定义视图的属性
· 在你的xml的布局文件中指定属性的值
· 在运行的时候,检索属性的值
· 将检索出来的属性的值应用到你的视图中
本部分将主要告诉你如何定义和指定属性的值,下部分则会介绍,在运行时,如何检索与应用属性的值。
定义自定义属性,你需要增加<declare-styleable>的resource的文件到你的工程,习惯的,我们把这个文件放在res/values/attrs.xml文件夹中,以下是一个简单的示例
<resources>; <declare-styleable name="PieChart"> <attr name="showText" format="boolean" /> <attr name="labelPosition" format="enum"> <enum name="left" value="0"/> <enum name="right" value="1"/> </attr> </declare-styleable> </resources>
上面的代码声明了两个属性,showText和lablePostion .这两个属性都属于命名为‘PieChart’的样式实例。这个样式的实例的名字,按照惯例,应该与自定义视图类的名字相同。但也不是必要严格的要保持一致,然而一个主流的代码编辑器会按照这种惯例来进行自动的代码完成。
一旦你定义好自定义属性,你就可以像内建的view类一样来使用这些属性。惟一的不同是自定义的属性所属的命名空间不同,它不是属于http://schemas.android.com/apk/res/android这个命名空间,而是属于http://schemas.android.com/apk/res/[your package name].例如下面就是使用PieChart的自定义属性。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://schemas.android.com/apk/res/com.example.customviews"> <com.example.customviews.charting.PieChart custom:showText="true" custom:labelPosition="left" /> </LinearLayout>
代码中,为了避免了输入较长的命名空间,在声明的时候,用到一个xmlns指令,这个指令声明了一个别名custome来指代http://schemas.android.com/apk/res/com.example.customviews,当然你可以选择你想要的别名来代表这个命名空间。
注意添加自定义视图到布局文件的xml标签的名字,它是自定义视图的全称描述。如果你的自定义视图是一个内部类,那么你需要用这个视图的外部类来进一步描述它,再假如,如果PieChart有一个内部类PieView,那么,使用这个这个内部类的属性,你应用使用这样的标签com.example.customviews.charting.PieChart$PieView.
未完待续