建立一个类继承自View,并重写方法onDraw(Canvas canvas)和onTouchEvent(MotionEvent event):
public class DrawCircle extends View {
Paint paint=new Paint();//画笔
float mX,mY;
Path path=new Path();
public DrawCircle(Context context, AttributeSet attrs) {
super(context,attrs);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(4);
paint.setColor(Color.RED);
if (mX==0&&mY==0) {
//坐标为(0,0)时不进行操作
}else {
path.lineTo(mX, mY);
}
canvas.drawPath(path, paint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
//第一次按下时将坐标定位到当前手按下的位置
if (mX==0&&mY==0) {
this.mX=event.getX();
this.mY=event.getY();
}
//判断手是否离开,是的话将坐标设为(0,0);
if (event.getAction()==MotionEvent.ACTION_UP) {
mX=0;
mY=0;
}else {
path.moveTo(mX,mY);
this.mX=event.getX();
this.mY=event.getY();
}
//刷新页面
this.invalidate();
return true;
}
}
新建一个布局文件draw_view.xml,引用刚写好的类文件,引用时写完整包名加类名:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<com.example.android_test.DrawCircle
android:layout_width="match_parent"
android:layout_height="match_parent" >
</com.example.android_test.DrawCircle>
</LinearLayout>
新建一个Activity,引用布局文件:setContentView(R.layout.draw_view);
public class CicleView extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.draw_view);
}
}
完成