主要分为两大步
首先 自己写一个类继承view:类里面写逻辑代码,重写三个参数,实例化一个画笔,重写ondrow();方法 ,重写onTouchevent()方法
第二步在布局中引用
以下是自己写的自定义view类 需要可以直接拷贝自己的工程中 然后在布局文件中引用即可
package view; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; /** * Created by 1 on 2017/6/7. */ public class MyView_Hy extends View { private Paint mPaint; //设置起始位置 private float x=100; private float y=100; //实例化一个rect类 // Rect类主要用于表示坐标系中的一块矩形区域, // 并可以对其做一些简单操作。 // 这块矩形区域,需要用左上右下两个坐标点表示(left,top,right,bottom Rect rect = new Rect();
public MyView_Hy(Context context) { super(context); } public MyView_Hy(Context context, @Nullable AttributeSet attrs) { super(context, attrs); mPaint = new Paint();//创建画笔 mPaint.setColor(Color.BLUE);//设置画笔颜色 mPaint.setAlpha(255);// 透明度 //mPaint.setStyle(mPaint.Style.STROKE);// //设置画笔为空心 mPaint.setStrokeWidth(2);// 画笔线宽 mPaint.setAntiAlias(true);//设置抗锯齿 } public MyView_Hy(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } //重写Ondrow();方法 @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //调用画布canvas里面的画圆方法,并设置里面的参数坐标x y,半径,画笔 canvas.drawCircle(x,y,100,mPaint); canvas.drawText("球球",100,200,mPaint); rect.set((int)(x-100),(int)(y-100),(int)(x+100),(int)(y+100)); } //重写 onTouchEvent 方法 @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()){ case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_MOVE: float x1 = event.getX(); float y1 = event.getY(); if(x1>rect.left && x1<rect.right && y1>rect.top && y1<rect.bottom){ //得到当前坐标 用event得到 this.x =event.getX(); this.y = event.getY(); //刷新当前视图 invalidate();//这个方法是主线程中刷新, // postInvalidate();//这个方法是子线程中刷新 } break; case MotionEvent.ACTION_UP: break; } //记住最后要返回TRUE return true; } }