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