Android自定义View基础:坐标系
Android自定义View基础:角度弧度
1.自定义View
在没有现成的View,需要自己实现的时候,就使用自定义View,一般继承自View,SurfaceView或其他的View,不包含子View。
2.自定义View中的构造方法
一、
//一般我们只使用前两个
//一般在直接New一个View的时候调用。
public PainView(Context context) {
super(context);
}
//一般在layout文件中使用的时候会调用,关于它的所有属性(包括自定义属性)都会包含在attrs中传递进来。
public PainView(Context context, AttributeSet attrs) {
super(context, attrs);
}
//这以下我不会用啊!!
public PainView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public PainView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
二、
//在Avtivity中
PainViewview = new PainView(this);
三、
//在layout文件中 - 格式为: 包名.View名
com.xx.xx.PainView
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
3.测量View大小(onMeasure)
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int widthsize = MeasureSpec.getSize(widthMeasureSpec); //取出宽度的确切数值
int widthmode = MeasureSpec.getMode(widthMeasureSpec); //取出宽度的测量模式
int heightsize = MeasureSpec.getSize(heightMeasureSpec); //取出高度的确切数值
int heightmode = MeasureSpec.getMode(heightMeasureSpec); //取出高度的测量模式
}
****实际上关于上面的东西了解即可,在实际运用之中只需要记住有三种模式,用 MeasureSpec 的 getSize是获取数值, getMode是获取模式 如果对View的宽高进行修改了**
注意
不要调用super.onMeasure(widthMeasureSpec,heightMeasureSpec);要调用setMeasuredDimension(widthsize,heightsize); 这个函数。**
4.确定View大小(onSizeChanged)
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
}
5.确定子View布局位置(onLayout)
确定布局的函数是onLayout,它用于确定子View的位置,在自定义ViewGroup中会用到,他调用的是子View的layout函数。
child.layout(l, t, r, b);
//l View左侧距父View左侧的距离 getLeft();
//t View顶部距父View顶部的距离 getTop();
//r View右侧距父View左侧的距离 getRight();
//b View底部距父View顶部的距离 getBottom();
6.绘制内容(onDraw)
//onDraw是实际绘制的部分,也就是我们真正关心的部分,使用的是Canvas绘图。
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}