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;
    }
}

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android Studio中的滑动按钮是指Switch控件,它是一种开关控件,可以在打开和关闭之间切换。用户可以通过滑动按钮来改变其状态。在布局文件中,可以使用Switch标签来创建滑动按钮。在代码中,可以使用Switch类来控制滑动按钮的状态和行为。 ### 回答2: Android Studio滑动按钮是一个非常流行的用户界面元素,用于控制应用程序中的设置和功能开关滑动按钮分为开关按钮和拖动按钮两种。使用滑动按钮可以提供一种更直观、更易于使用和更现代的选择方式,同时还可以增加应用程序的可用性和易用性。 开关按钮可以让用户轻松开启或关闭应用程序的某些设置或功能,例如启用或禁用通知、开启或关闭音频播放、启用或禁用数据同步等。在开关按钮上,用户可以看到当前设置状态(开启或关闭),并可以通过滑动按钮来更改它们。 拖动按钮可以让用户设置某些选项的值,例如音量或亮度等级。拖动按钮可以移动到不同的位置来反映不同的值。用户可以向左或向右拖动按钮来更改选项的值。在滑动按钮上,用户可以看到当前选项设置的值,并可以通过滑动按钮来更改它们。 Android Studio提供了一个名为Switch的视图组件,用于创建开关按钮。该组件可以通过XML代码或代码方式创建,并可以设置开启和关闭状态的文本、颜色和图标等属性。 另一方面,Android Studio还提供了SeekBar组件,用于创建拖动按钮。您可以通过XML代码或代码方式创建SeekBar,并设置最小值、最大值、当前值、进度条颜色和拖动按钮的样式等属性。 总的来说,Android Studio滑动按钮非常易于使用和灵活,开发者可以将它们嵌入到各种应用程序中,以提供更人性化的用户体验。 ### 回答3: Android Studio中的滑动按钮(Switch)是一种常见的UI控件,它允许用户通过滑动操作来切换某种状态。滑动按钮看起来像一个小型开关,但是其显示的状态可以是开、关或未确定状态。 使用Android Studio创建一个滑动按钮很简单,只需在XML布局文件中添加以下代码: ``` <Switch android:id="@+id/my_switch" android:layout_width="wrap_content" android:layout_height="wrap_content" /> ``` 这里的ID和布局宽度和高度可以根据实际需要进行修改。 接下来,我们可以在Activity中通过findViewById方法获取到这个滑动按钮,并添加一个OnCheckedChangeListener来监听状态改变事件: ``` Switch mySwitch = (Switch) findViewById(R.id.my_switch); mySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // 如果滑动按钮被切换到打开状态 if (isChecked) { // 执行你想要的操作 } else { // 执行另一种操作 } } }); ``` 在onCheckedChanged方法中,我们可以根据isChecked的值来判断滑动按钮的状态,从而执行相应的操作。 另外,我们还可以在XML布局文件中添加一些属性来自定义滑动按钮的外观,例如: - android:focusable="false":滑动按钮不接受焦点,点击事件将被忽略。 - android:textOff="关闭":指定了关闭状态下的文本。 - android:textOn="打开":指定了打开状态下的文本。 - android:thumbTint="#FF0000":指定了滑块的颜色。 - android:trackTint="#00FF00":指定了轨道的颜色。 总之,Android Studio中的滑动按钮是一个非常实用的UI控件,可以帮助我们实现许多功能。您可以在UI设计中灵活运用滑动按钮,为用户提供更好的交互体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值