自定义View 一个圆形 并TouchEvent移动 写完这个类就可以在xml中调用 import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.widget.Toast; /** * Created by hua on 2017/8/3. */ public class MyCircleView extends View { //画笔 private Paint mPaint; //圆的半径 private float mRadius = 50f; //圆的圆心的x坐标 private float pointX = mRadius; //圆的圆心的y坐标 private float pointY = mRadius; //控制是否可以移动的变量 true的时候可以移动 private boolean moveable; public MyCircleView(Context context) { this(context,null); } public MyCircleView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); //构造一个paint mPaint = new Paint(); mPaint.setColor(Color.CYAN); mPaint.setAntiAlias(true); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //根据圆心的坐标来绘制圆的位置的,而圆心的坐标,我们触摸屏幕的时候被我们修改了 canvas.drawCircle(pointX,pointY,mRadius,mPaint); } @Override public boolean onTouchEvent(MotionEvent event) { float touchX; float touchY; switch (event.getAction()){ case MotionEvent.ACTION_DOWN: touchX = event.getX(); touchY = event.getY(); if (touchX>pointX-mRadius && touchX<pointX+mRadius && touchY>pointY-mRadius && touchY<pointY+mRadius){ moveable = true; Toast.makeText(getContext(), "按下了", Toast.LENGTH_SHORT).show(); }else { moveable = false; } break; case MotionEvent.ACTION_MOVE: if (moveable){ //重新设置一下圆心的位置, 把我们圆心的位置(pointX,pointY)设置成 // 当前触摸的位置(event.getX(),event.getY()) pointX = event.getX(); pointY = event.getY(); //去重新绘制, 会重新走onDraw()方法 invalidate(); } break; //抬起的事件 case MotionEvent.ACTION_UP: break; } return true; } }