Android studio实现滑动开关

大家好,今天刚学会使用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实现滑动开关 的全部内容, 来源链接: utcz.com/p/242362.html

回到顶部