文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android studio 滑动开关实现

2022-06-06 13:10

关注

大家好,今天刚学会使用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 = 840 && getY = 810 && getY1 <= 990) {
                            if (getX1 = 443) {
                                x = 580;
                                modelFlag = true;
                            } else {
                                if (!modelFlag) {
                                    x = 150;
                                    modelFlag = false;
                                } else {
                                    x = 580;
                                    modelFlag = true;
                                }
                            }
                    }
                    break;
        }
        invalidate();//刷新界面
        return true;
    }
}

作者:上帝的头子的头子


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯