Android自定义View——基础篇(原理)
View的分类
视图View主要分为两类:
单一视图:即一个View,比如TextView
视图组:即多个View组成的ViewGroup,如LinearLayout
View类简介
View类是Android中各种组件的基类,如View是ViewGroup的基类
View类表现为在屏幕上各种视图
Android中的UI组件都由View、ViewGroup组成
View的构造函数共有4个(自定义View必须重写至少一个构造函数):
//如果View是在Java代码里面new的,则调用第一个构造函数
public CarsonView(Context context){
super(context);
}
//如果view是在.xml里面声明的,则调用第二个构造函数
//自定义属性是从AttributeSet参数传进来的
public CarsonView(Context context,AttributeSet attrs){
super(context,attrs);
}
//不会自动调用
//一般是在第二个构造函数里主动调用
//如View有style属性时
public CarsonView(Context context,AttributeSet attrs,int defStyleAttr){
super(context,attrs,defStyleAttr);
}
//API21之后才使用
//不会自动调用
//一般是在第二个构造函数主动调用
//如View有style属性
public CarsonView(Context context,AttributeSet attrs,int defStyleAttr,int defStyleRes){
super(context,attrs,defStyleAttr,defStyleRes);
}
这里穿插一下对构造方法的深入理解,见笔记:Android自定义View——对构造方法的深入理解。
View视图结构
对于多View视图,结构是树形结构。
[图片上传失败...(image-85482a-1512547429002)]
Android坐标系
Android的坐标系定义为:
屏幕左上角为坐标远点
向右为x轴增大方向
向下为y轴增大方向
View的位置(坐标)描述
View的位置由四个定点决定:
4个顶点的位置描述分别由4个值决定:
(请记住:View的位置是相对于父控件而言的)
- Top:子
View
上边界到父
view
上边界的距离
- Left:子
View
左边界到父
view
左边界的距离
- Bottom:子
View
下边距到父
View
上边界的距离
- Right:子
View
右边界到父
view
左边界的距离
View位置获取方式
-
View的位置是通过view.getxxx()函数获取:
如:public final int getTop{ return mTop; }
-
与MotionEvent中的get()和getRaw()的区别:
//get() :触摸点相对于其所在组件坐标系的坐标
event.getX();
event.getY();
//getRaw() :触摸点相对于屏幕默认坐标系的坐标
event.getRawX();
event.getRawY();
Android中的角度(angle)与弧度(radian)
- 自定义View实际上是将一些简单的形状通过计算,从而组合到一起形成的效果。
Android中的颜色相关内容
- Android中的颜色相关包括:颜色模式、创建颜色的方式以及颜色的混合模式。
1.颜色模式
Android支持的颜色模式:
[图片上传失败...(image-cb307b-1512547429002)]
以ARGB8888为例:
[图片上传失败...(image-293ed5-1512547429002)]
2.定义颜色的方式
- 在Java中定义颜色
int
color = Color.GRAY;
//Color类是使用ARGB值进行表示
int
color = Color.argb(
127
,
255
,
0
,
0
);
int
color =
0xaaff0000
;
- 在xml文件中定义颜色
<?
xml version=
"1.0"
encoding=
"utf-8"
?>
<
resources
//定义了红色(没有alpha(透明)通道)
<
color
name
=
"red"
ff0000
</
color
//定义了蓝色(没有alpha(透明)通道)
<
color
name
=
"green"
00ff00
</
color
</
resources