转载https://blog.youkuaiyun.com/jiahui6666/article/details/83719306
创建项目
自定义View
public class globlue extends View {
private Paint mPaint;
private int x;
private int y;
private int startX;
private int startY;
private boolean mBall;
public globlue(Context context) {
super(context);
}
public globlue(Context context, AttributeSet attrs) {
super(context, attrs);
}
public globlue(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, 0);
initView();
}
private void initView(){
// 实例画笔对象
mPaint= new Paint();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
// 初始化View位置
int width=this.getWidth();
int height=this.getHeight();
x=width/2;
y=height/2;
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
}
private static int RADIUS=50;
@Override
protected void onDraw(Canvas canvas) {
mPaint.setColor(Color.BLUE);
canvas.drawCircle(x,y,RADIUS,mPaint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startX = (int) event.getX();
startY = (int) event.getY();
// 是否触摸到View
mBall = isBall(startX, startY);
break;
case MotionEvent.ACTION_MOVE:
if (mBall) {
x = (int) event.getX();
y = (int) event.getY();
// 刷新界面,调用onDraw()
postInvalidate();
}
break;
case MotionEvent.ACTION_UP:
break;
default:
break;
}
return true;
}
public boolean isBall(int startX,int startY){
double sqrt=Math.sqrt((startX-x)*(startX-x)+(startY-y)*(startY-y));
if(sqrt<RADIUS){
return true;
}
return false;
}
}
在布局文件中添加自定义控件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<com.example.gn.viewdemo.globlue
android:id="@+id/view"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
/>
</LinearLayout>
运行项目效果