话不多说,直接上代码.
MyView.java
package com.zking.android19_pointstouch; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; /** * Created by Administrator on 2017/7/9 0009. */ public class MyView extends View{//报错:Alt+回车-->4个方法 public MyView(Context context) { super(context); } public MyView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } //定义一个全局变量 private float x; //x,y圆心的坐标(因为是触摸哪里哪里就画圆,所以圆心不能定义一个死的) private float y; private int r=100;//半径 /** * onDraw:画东西的 */ @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint paint=new Paint(); canvas.drawCircle(x,y,r,paint);//Ctrl+P:圆心的坐标,半径,画笔 默认为在左上角有一个1/4的圆 } //触摸事件 @Override public boolean onTouchEvent(MotionEvent event) { //获取手指的行为 int action=event.getAction(); //获取手指的坐标(新的坐标) x=event.getX();//给了全局变量的x y=event.getY(); //判断 switch (action) {//action.sw case MotionEvent.ACTION_DOWN://代表按下:取值为0 可以直接case 0: break; case MotionEvent.ACTION_UP://代表抬起:取值为1 break; case MotionEvent.ACTION_MOVE://代表移动:取值为2 break; } //重新调用onDraw 重绘 invalidate();//主线程里面调 //postInvalidate();//子线程里面调 return true; } }
MainActivity.java
package com.zking.android19_pointstouch; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new MyView(this)); } }