Android studio实现滑动开关

所属分类: 软件编程 / Android 阅读数: 44
收藏 0 赞 0 分享

大家好,今天刚学会使用Android Studio实现滑动开关的效果,自己感觉还可以,和大家分享一下,如果觉得可以的可以拿去,然后再给我点个赞,谢谢。本人也是学Android studiok开发不久,是个菜鸟,各位大佬觉得有不好的地方,可以讨论一下,共同学习,一起进步。

实现效果

下面是代码,代码写的比较粗糙,注释没有写的很好,需要用的可以自己移植一下

package com.example.biansheng2;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

import androidx.annotation.Nullable;

/**
 * 用于选择手动模式还是路线规划模式
 */
public class ModelSelectView extends View {
 Paint backPaint = new Paint();//背景画笔
 Paint facePaint = new Paint();//表面视图画笔
 Paint colorPaint1 = new Paint();//绘制红色和蓝色
 Paint colorPaint2 = new Paint();//绘制橙色
 Paint colorPaint3 = new Paint();//绘制灰色
 Paint handFont = new Paint();//手动控制模式字体
 Paint routeFont = new Paint();//路线规划模式字体

 boolean modelFlag = false;//false表示为手动控制模式,true表示为路线规划模式

 RectF mRectF1 = new RectF(150, 840, 580, 960);

 int x = 150, y = 900;//得到手指再控件上移动的坐标

 public ModelSelectView(Context context, @Nullable AttributeSet attrs) {
 super(context, attrs);
 }

 @Override
 protected void onDraw(Canvas canvas) {
 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);


 }


 private void paintInit() {
 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);

 Typeface font = 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
 public boolean onTouchEvent(MotionEvent event) {
 switch (event.getAction()) {
  case MotionEvent.ACTION_DOWN:

  break;

  case MotionEvent.ACTION_MOVE:
  int getX = (int) event.getX();
  int getY = (int) event.getY();

  //判断得到的坐标是否在视图范围之内
  if (getX >= 150 && getX <= 580 && getY >= 840 && getY <= 960) {
   x = getX;
   y = 900;
  }

  break;
  case MotionEvent.ACTION_UP:
   int getX1 = (int) event.getX();
   int getY1 = (int) event.getY();
   //判断是否在控件内
   if (getY1 >= 810 && getY1 <= 990) {
    if (getX1 <= 280) {
    x = 150;
    modelFlag = false;
    } else if (getX1 >= 443) {
    x = 580;
    modelFlag = true;
    } else {
    if (!modelFlag) {
     x = 150;
     modelFlag = false;
    } else {
     x = 580;
     modelFlag = true;
    }
    }
   }
   break;
 }
 invalidate();//刷新界面
 return true;
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

Android 自定义球型水波纹带圆弧进度效果(实例代码)

最近小编接到一个这样的需求,需要实现一个圆形水波纹,带进度,两层水波纹需要渐变显示,且外围有一个圆弧进度。今天小编给大家分享实例代码,感兴趣的朋友一起看看吧
收藏 0 赞 0 分享

Flutter 实现下拉刷新上拉加载的示例代码

这篇文章主要介绍了Flutter 实现下拉刷新上拉加载的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Windows实现Flutter环境搭建及配置这一篇就够了

这篇文章主要介绍了Windows实现Flutter环境搭建及配置这一篇就够了,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Android利用碎片fragment实现底部标题栏(Github模板开源)

Fragment可以作为Activity的组成部分,一个Activity可以有多个Fragment,这篇文章主要介绍了Android利用碎片fragment实现底部标题栏(Github模板开源),需要的朋友可以参考下
收藏 0 赞 0 分享

android studio 的下拉菜单Spinner使用详解

这篇文章主要介绍了android studio 的下拉菜单Spinner使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

解析Android 8.1平台SystemUI 导航栏加载流程

这篇文章主要介绍了Android 8.1平台SystemUI 导航栏加载流程,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Android仿微信录音功能

这篇文章主要为大家详细介绍了Android仿微信录音功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android仿微信键盘切换效果

这篇文章主要为大家详细介绍了Android仿微信键盘切换效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android超清晰6.0权限申请AndPermission

这篇文章主要介绍了Android超清晰6.0权限申请AndPermission,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android仿微信录制语音功能

这篇文章主要介绍了Android仿微信录制语音功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享
查看更多