最近参加了一个比赛,要用到自己做一个自定义的小地图,所以在网上查找了一些关于自定义view的有关资料,也了解了自定义控件的初步知识。
效果图
第一阶段我画了一个自制的网格图,点哪个网格就会哪个网格就会显示。
工作环境图
代码介绍
1。我们都知道当使用android的原始控件时,每个控件都可以定义属性,比如android:id ,android:layout_width等等大家并不陌生的属性,有些属性是每个控件都有的比如上面两个,还有一些是控件自己有的。我们自定义的控件可以定义自己想要的属性,方便我们以后自己使用。
那就是在values目录下创建一个attrs.xml文件。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MapView">
<attr name="border_color" format="color" />
<attr name="border_width" format="dimension" />
</declare-styleable>
</resources>
这样就给我们的我们就给控件加了 border_color 和border_width 两个属性,在这里的format里定义的是我们的属性的值是什么类型,比如border_color是color,border_width是dimension,每个不同的数据类型对应不同的类型。
2.第二部分也是最重要的自定义控件的类。
首先我们的自定义类要继承View
public class CustomView extends View {
}
接下来我们完成view要实现的三个不同参数的构造函数,其中init是我们自己写的初始化信息的函数。在第二个构造函数中,我们获取了我们在attrs.xml中定义的值。
public CustomView(Context context) {
super(context);
//初始化信息
init();
}
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
//获取我们自己的属性
TypedArray typedArray = context.getTheme().obtainStyledAttributes(
attrs, R.styleable.MapView, 0, 0);
try {
mBorderColor = typedArray.getColor(
R.styleable.MapView_border_color, 0xff000000);
mBorderWidth = typedArray.getDimension(
R.styleable.MapView_border_width, 2);
} finally {
typedArray.recycle();
}
init();
}
public CustomView(Cont