在andorid中View组件是一个矩形空白区域,类似于Swing编程中的JPanel,View组件没有任何内容,对于android应用的其他UI组件来说,他们都继承了View组件,然后再View组件提供的空白区域上绘制外观。
当开发者打算派生自己的UI组件时,首先定义一个继承View基类的子类,然后重写VIEW类的方法。
具体有哪些方法,这里不一一列出,可查阅文档;(下面的例子以重写onDraw方法为例)
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
public class DrawView extends View{
public float currentX=40;
public float currentY=50;
Paint p=new Paint();
public DrawView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public DrawView (Context context,AttributeSet set) {
super(context);
}
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
p.setColor(Color.RED);
canvas.drawCircle(currentX, currentY, 15, p);
}
//添加触控事件
public boolean onTouchEvent(MotionEvent event){
currentX=event.getX();
currentY=event.getY();
//通知当前组件重新绘制自己
invalidate();
return true;
}
}
下面将自定义的view添加到xml文件中:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<com.my.drawview.DrawView
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
其中com.my.drawview为包名,DrawView是类。
这样就实现了小球跟随手指移动。