Android studio实现滑动开关
大家好,今天刚学会使用AndroidStudio实现滑动开关的效果,自己感觉还可以,和大家分享一下,如果觉得可以的可以拿去,然后再给我点个赞,谢谢。本人也是学Androidstudiok开发不久,是个菜鸟,各位大佬觉得有不好的地方,可以讨论一下,共同学习,一起进步。
实现效果
下面是代码,代码写的比较粗糙,注释没有写的很好,需要用的可以自己移植一下
packagecom.example.biansheng2; importandroid.content.Context; importandroid.graphics.Canvas; importandroid.graphics.Color; importandroid.graphics.Paint; importandroid.graphics.RectF; importandroid.graphics.Typeface; importandroid.util.AttributeSet; importandroid.view.MotionEvent; importandroid.view.View; importandroidx.annotation.Nullable; /** *用于选择手动模式还是路线规划模式 */ publicclassModelSelectViewextendsView{ PaintbackPaint=newPaint();//背景画笔 PaintfacePaint=newPaint();//表面视图画笔 PaintcolorPaint1=newPaint();//绘制红色和蓝色 PaintcolorPaint2=newPaint();//绘制橙色 PaintcolorPaint3=newPaint();//绘制灰色 PainthandFont=newPaint();//手动控制模式字体 PaintrouteFont=newPaint();//路线规划模式字体 booleanmodelFlag=false;//false表示为手动控制模式,true表示为路线规划模式 RectFmRectF1=newRectF(150,840,580,960); intx=150,y=900;//得到手指再控件上移动的坐标 publicModelSelectView(Contextcontext,@NullableAttributeSetattrs){ super(context,attrs); } @Override protectedvoidonDraw(Canvascanvas){ super.onDraw(canvas); paintInit(); canvas.drawRect(mRectF1,backPaint); canvas.drawCircle(150,900,60,backPaint); canvas.drawCircle(580,900,60,backPaint); if(!modelFlag){ canvas.drawCircle(150,900,60,facePaint); canvas.drawRect(150,840,x,960,facePaint); //设置手动控制字体可见 handFont.setAlpha(255); //设置路线规划字体不可见 routeFont.setAlpha(0); }else{ canvas.drawCircle(580,900,60,facePaint); canvas.drawRect(x,840,580,960,facePaint); //设置手动控制字体不可见 handFont.setAlpha(0); //设置路线规划字体可见 routeFont.setAlpha(255); } canvas.drawText("手动控制",250,915,handFont); canvas.drawText("路线规划",250,915,routeFont); canvas.drawCircle(x,y,44,backPaint); canvas.drawCircle(x,y,40,colorPaint2); canvas.drawCircle(x,y,47,colorPaint3); } privatevoidpaintInit(){ if(!modelFlag){ backPaint.setAntiAlias(true); backPaint.setColor(Color.parseColor("#ff00b5eb")); facePaint.setColor(Color.parseColor("#D81B60")); facePaint.setAntiAlias(true); }else{ backPaint.setAntiAlias(true); backPaint.setColor(Color.parseColor("#D81B60")); facePaint.setColor(Color.parseColor("#ff00b5eb")); facePaint.setAntiAlias(true); } colorPaint2.setAntiAlias(true); colorPaint2.setColor(Color.parseColor("#FF6407")); colorPaint1.setAntiAlias(true); colorPaint1.setColor(Color.BLUE); colorPaint3.setColor(Color.WHITE); colorPaint3.setAntiAlias(true); colorPaint3.setStyle(Paint.Style.STROKE); colorPaint3.setStrokeWidth(5); Typefacefont=Typeface.create(Typeface.DEFAULT_BOLD,Typeface.BOLD_ITALIC); handFont.setTypeface(font); handFont.setColor(Color.WHITE); handFont.setAntiAlias(true); handFont.setTextSize(50); routeFont.setTypeface(font); routeFont.setColor(Color.WHITE); routeFont.setAntiAlias(true); routeFont.setTextSize(50); } @Override publicbooleanonTouchEvent(MotionEventevent){ switch(event.getAction()){ caseMotionEvent.ACTION_DOWN: break; caseMotionEvent.ACTION_MOVE: intgetX=(int)event.getX(); intgetY=(int)event.getY(); //判断得到的坐标是否在视图范围之内 if(getX>=150&&getX<=580&&getY>=840&&getY<=960){ x=getX; y=900; } break; caseMotionEvent.ACTION_UP: intgetX1=(int)event.getX(); intgetY1=(int)event.getY(); //判断是否在控件内 if(getY1>=810&&getY1<=990){ if(getX1<=280){ x=150; modelFlag=false; }elseif(getX1>=443){ x=580; modelFlag=true; }else{ if(!modelFlag){ x=150; modelFlag=false; }else{ x=580; modelFlag=true; } } } break; } invalidate();//刷新界面 returntrue; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。