大家好,今天刚学会使用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 studio开关按钮,Android studio实现滑动开关相关推荐

  1. Android Studio 开关按钮Switch

    点此查看全部文字教程.视频教程.源代码 本文目录 1. 功能 2. 界面 3. 获取开关情况 4. 监听开关状态 1. 功能 开关按钮功能其实跟复选框CheckBox一样,都是表示是否选中.只不过界面 ...

  2. android dimensions.xml,[Android Studio #2] 操作資源XML檔

    利用Android Studio產生出第一個程式後,點擊Project按鈕觀察專案的目錄結構,再研究資源檔的使用方法,同時在第一個程式畫面裡增加另一個文字元件. Android Studio的專案目錄 ...

  3. android studio visual studio 2015,Visual Studio Emulator for Android

    Visual Studio Emulator for Android 11/15/2016 4 分钟可看完 本文内容 Note This article applies to Visual Studi ...

  4. 使用Android Studio搭建Android集成开发环境

    一.Android Studio简单介绍 2013年GoogleI/O大会首次发布了Android Studio IDE(Android平台集成开发环境).它基于Intellij IDEA开发环境,旨 ...

  5. 【Android 逆向】Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | Visual Studio 中 SDK 和 NDK 安装位置 )

    文章目录 一.Visual Studio 中安装 " 使用 C++ 的移动开发 " 开发库 二.Visual Studio 中安装的 Android SDK 和 NDK 位置 三. ...

  6. 【Android 逆向】Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | VS 自带的 Android 平台应用创建与配置 )

    文章目录 一.Visual Studio 安装 " 使用 C++ 的移动开发 " 二.Visual Studio 中创建 " 动态共享库(Android) " ...

  7. 【Android RTMP】Android Studio 集成 x264 开源库 ( Ubuntu 交叉编译 | Android Studio 导入函数库 )

    文章目录 安卓直播推流专栏博客总结 一. x264 简介 二. x264 交叉编译 三. Android Studio 导入函数库 四. 交叉编译版本 五. GitHub 项目地址 安卓直播推流专栏博 ...

  8. 基于Android Studio搭建Android应用开发环境

    备注:电脑是windows xp系统 1.     安装JDK和环境变量设置 JDK是java development kit,Java JDK下载地址 http://www.oracle.com/t ...

  9. android studio socket 失败,Android应用开发Android Studio建立Socket连接失败解决方法

    本文将带你了解Android应用开发Android Studio建立Socket连接失败解决方法,希望本文对大家学Android有所帮助. < Android Studio建立Socket连接失 ...

最新文章

  1. 【Qt】通过QtCreator源码学习Qt(九):容器算法总结
  2. 写一个ArrayList类的动态代理类
  3. 我们部署个额外域控制器
  4. 17、有名管道与无名管道之间的区别
  5. python3 class init_python3 module中__init__.py的需要注意的地方
  6. 水烟炭行业调研报告 - 市场现状分析与发展前景预测
  7. 文档转成html在线预览,java poi Word文档转为HTML文件 实现在线预览功能
  8. PHP博客导入导出,Thinkphp5.0导入导出详解
  9. springboot+自定义注解实现灵活的切面配置
  10. Git版本控制及远程仓库的使用
  11. 用Go语言打印三角形汇总 (Golang经典编程案例)
  12. 一文讲清跨境S2B2C模式及线上品牌/新零售品牌实战打法
  13. 奋斗的小孩系列 FPGA学习altera系列: 第一篇 软件的安装与破解
  14. 串口打印调试信息(干货)
  15. Outlook打不开的问题
  16. TR-069 协议简介
  17. 2021届毕业应届生到现在的职场工作,从一个懵懂大学生到IT职场人的转变
  18. Methyltetrazine-PEG8-DBCO,甲基四嗪--八聚乙二醇-二苯并环辛炔
  19. 让自己不烦心的心理暗示
  20. Object.keys方法详解

热门文章

  1. 王琦:5G新视频应用的机会窗口将在2-3年内
  2. FFmpeg代码导读——基础篇
  3. 从 bug 中学习:六大开源项目告诉你 go 并发编程的那些坑
  4. 腾讯成本优化黑科技:整机CPU利用率最高提升至90%
  5. 金融业对区块链必须有足够认识
  6. 我又来说Git了, Git 与 SVN 大对比!
  7. leetcode 453,462. Minimum Moves to Equal Array Elements I, II | 453, 462. 最少移动次数使数组元素相等(图解)
  8. leetcode 530. 二叉搜索树的最小绝对差(Java版)
  9. Java中的类型推断和lambda表达式
  10. 使用IBM Blockchain Platform extension开发你的第一个fabric智能合约