我们在生活中总会用到一些东西,有一个东西来管理的 那就是开关

下面我们就写一个自定义view绘制的开关了

 

下面就直接上代码了

public class KaiGuan extends View {


    boolean flag=true;
    private final Paint paint;

    public interface KaiGuanJieKou{
        void kai();
        void guan();
    }
    KaiGuanJieKou kaiGuanJieKou;

    public void setKaiGuanJieKou(KaiGuanJieKou kaiGuanJieKou) {
        this.kaiGuanJieKou = kaiGuanJieKou;
    }

    public KaiGuan(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        paint = new Paint();
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        setMeasuredDimension(75,40);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        int measuredWidth = getMeasuredWidth();//当前控件的宽度
        int measuredHeight = getMeasuredHeight();//当前控件的高度

        paint.setStrokeWidth(1);
        paint.setColor(getResources().getColor(R.color.lvse));
        paint.setStyle(Paint.Style.FILL_AND_STROKE);
        paint.setAntiAlias(true);
        //默认背景开关  左边绿色,右边白圆
        /**
         * 将开关分为三个部分,两边半圆,中间正方形
         */
        int ziwidth = measuredWidth / 3;
        int ziheight = measuredHeight / 2;


        if(flag){
            paint.setColor(getResources().getColor(R.color.qianhuise));
            //最左边绿色半圆  参数1,确认半圆的大小,,参数2,绘制的起始角度,,参数3,是绘制的总和角度,,参数4,是否包含圆心,参数5,画笔
            //参数2和参数3,一定要遵循android的y轴的特殊性,以及参数3的正/逆时针的旋转
            canvas.drawArc(new RectF(0,0,ziwidth*2,measuredHeight),90,180,true,paint);
            //绘制中心的方块
            canvas.drawRect(ziwidth,0,ziwidth*2,measuredHeight,paint);
            //绘制最右边的半圆
            canvas.drawArc(new RectF(ziwidth,0,measuredWidth,measuredHeight),90,-180,true,paint);

            //移动器
            paint.setStrokeWidth(1);
            paint.setColor(Color.WHITE);
            paint.setStyle(Paint.Style.FILL_AND_STROKE);
            paint.setAntiAlias(true);
            //左边鱼眼  参数1,圆心的x坐标,参数2,圆心的y轴坐标,,参数3,圆的半径
            canvas.drawCircle(ziwidth,ziheight,ziheight-2,paint);
        }else{

            //最左边绿色半圆  参数1,确认半圆的大小,,参数2,绘制的起始角度,,参数3,是绘制的总和角度,,参数4,是否包含圆心,参数5,画笔
            //参数2和参数3,一定要遵循android的y轴的特殊性,以及参数3的正/逆时针的旋转
            canvas.drawArc(new RectF(0,0,ziwidth*2,measuredHeight),90,180,true,paint);
            //绘制中心的方块
            canvas.drawRect(ziwidth,0,ziwidth*2,measuredHeight,paint);
            //绘制最右边的半圆
            canvas.drawArc(new RectF(ziwidth,0,measuredWidth,measuredHeight),90,-180,true,paint);

            //移动器  默认在右边
            paint.setStrokeWidth(1);
            paint.setColor(Color.WHITE);
            paint.setStyle(Paint.Style.FILL_AND_STROKE);
            paint.setAntiAlias(true);
            //右边鱼眼  参数1,圆心的x坐标,参数2,圆心的y轴坐标,,参数3,圆的半径
            canvas.drawCircle(ziwidth*2,ziheight,ziheight-2,paint);
        }

    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if(event.getAction()==MotionEvent.ACTION_DOWN){
            int x = (int)event.getX();
            if(x <getMeasuredWidth()/2){
                flag=true;
                kaiGuanJieKou.guan();
            }else{
                flag=false;
                kaiGuanJieKou.kai();
            }
        }
        postInvalidate();
        return true;
    }
}

 

然后再你用的哪个位置,把这个开关的空间给加进去,给一个id

 

 

 

比如:

 

全程自定义view绘制的一个开关器

然后我们这时候直接给一个id然后调取我们写的一个自定义接口就可以用了。。

 

相关文章:

  • 2022-12-23
  • 2021-09-27
  • 2021-11-19
  • 2022-12-23
  • 2022-01-12
  • 2021-07-20
  • 2021-09-23
  • 2021-05-24
猜你喜欢
  • 2021-06-11
  • 2022-01-18
  • 2021-06-12
  • 2021-07-08
  • 2022-01-04
  • 2021-08-09
  • 2021-09-25
相关资源
相似解决方案