Android开发仿IOS滑动开关实现代码
Android开发仿IOS滑动开关实现代码
Android与iOS相比,ios好多控件都是自带的,而android需要使用自定义来实现。今天说的是ios的滑动开关,我层看到好多博客都是通过自定义ToggleButton实现的。这里我通过自定义view来实现他的效果。
首先在onsizechange里把2个半圆和一个矩形绘制出来。
width=w; height=h; left=top=0; right=width; bottom=height*0.8f; cx=(right+left)/2; cy=(bottom+top)/2; RectFrectF=newRectF(left,top,bottom,bottom); path.arcTo(rectF,90,180); rectF.left=right-bottom; rectF.right=right; path.arcTo(rectF,270,180); path.close(); circle_left=0; circle_right=bottom; circle_width=circle_right-circle_left; floatcircle_height=(bottom-top)/2; radius=circle_height*0.9f; borderwidth=(int)(2*(circle_height-radius)); circle_cx=width-circle_height;
剩下的就是ondraw方法来绘制颜色,以及切换的效果。
protectedvoidonDraw(Canvascanvas){
super.onDraw(canvas);
paint.setStyle(Style.FILL);
paint.setAntiAlias(true);
canvas.setDrawFilter(newPaintFlagsDrawFilter(0,Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG));
if(isChoose){
paint.setColor(onColor);
}else{
paint.setColor(offColor);
}
canvas.drawPath(path,paint);
isAnimation=isAnimation-0.1f>0?isAnimation-0.1f:0;
//缩放大小参数随isAnimation变化而变化
finalfloatscale=0.98f*(isChoose?isAnimation:1-isAnimation);
//保存canvas状态
canvas.save();
canvas.scale(scale,scale,circle_cx,cy);
paint.setColor(offColor);
canvas.drawPath(path,paint);
canvas.restore();
paint.reset();
floatbTranslateX=width-circle_width;
finalfloattranslate=bTranslateX*(isChoose?1-isAnimation:isAnimation);
canvas.translate(translate,0);
if(isAnimation>0){
invalidate();
}
canvas.save();
paint.setStyle(Style.FILL);
paint.setColor(offColor);
canvas.drawCircle(circle_width/2,circle_width/2,radius,paint);//按钮白底
paint.setStyle(Style.STROKE);
paint.setColor(borderColor);
paint.setStrokeWidth(borderwidth);
canvas.drawCircle(circle_width/2,circle_width/2,radius,paint);//按钮灰边
canvas.restore();
}
最后我们在ontouch里面去改变他的状态:
publicbooleanonTouchEvent(MotionEventevent){
switch(event.getAction()){
caseMotionEvent.ACTION_DOWN:
returntrue;
caseMotionEvent.ACTION_CANCEL:
returntrue;
caseMotionEvent.ACTION_UP:
isAnimation=1;
isChoose=!isChoose;
listener.onStateChanged(isChoose);
invalidate();
break;
}
returnsuper.onTouchEvent(event);
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!