欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

自定义View 小圆随手指移动

程序员文章站 2022-06-09 10:28:16
...

自定义View就是为了实现系统自带控件无法实现的功能

自定义一个View(小圆)首先要继承一个View

public class CircleView extends View {

    private float cx = 100;
    private float cy = 100;

    public CircleView(Context context) {
        super(context);
    }

    public CircleView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public CircleView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }


    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        Paint paint = new Paint();
        paint.setColor(Color.RED);
        paint.setAntiAlias(true);
        paint.setStyle(Paint.Style.FILL);

        canvas.drawCircle(cx,cy,100,paint);

    }

     // 这是为了解决事件冲突
    @Override
    public boolean onTouchEvent(MotionEvent event) {

        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN://按下
                cx = event.getX();
                cy = event.getY();

                break;
            case MotionEvent.ACTION_MOVE://移动
                cx = event.getX();
                cy = event.getY();

                break;
            case MotionEvent.ACTION_UP://抬起
                cx = event.getX();
                cy = event.getY();

                break;
        }

        //需要重新绘制一下图形
        //invalidate();//但是只能在主线程进行图形的绘制
        postInvalidate();//主线程和子线程都可以....调用这两个方法的时候,会自动调用onDraw方法

        //触摸事件自己处理
        return true;
    }

之后要在布局之中要用到他

 <com.dash.a03_custom_view.view.CircleView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />