我们在生活中总会用到一些东西,有一个东西来管理的 那就是开关
下面我们就写一个自定义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
比如:
然后我们这时候直接给一个id然后调取我们写的一个自定义接口就可以用了。。