Android 自定义打开关闭按钮Switch

本文指导如何在Android项目中自定义一个开关按钮,包括尺寸确定、蓝色背景和圆的绘制,利用`onMeasure`和`Canvas`API,以及如何根据开关状态移动圆形。
摘要由CSDN通过智能技术生成

项目中通常会遇到一个需求,根据开关来判断当前业务是否使用,那么就需要用到一个开关按钮。
如果需要自己定义的话,怎么实现呢?
在这里插入图片描述
在这里插入图片描述

我们要实现一个东西,就得一步一步来,这样思路就比较清晰,遇到问题也就可以一步一步去解决。
我们把这个按钮分为几部分,一个蓝色背景,一个白色的圆。然后点击后背景变为红色,然后圆移动到右边。这就是这个view的组成部分。那么怎么实现呢?
首选我们得确定这个view的大小。所以就需要对它的onMeasure方法重写。这个控件是写在xml中的,所以它的大小就已经确定了。那么onMeasure就好处理了

  override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
        width = MeasureSpec.getSize(widthMeasureSpec)
        height = MeasureSpec.getSize(heightMeasureSpec)
        setMeasuredDimension(widthMeasureSpec, heightMeasureSpec)
    }

获取xml中的大小。大小确定后,那么就开始我们最终的环节,绘制!!!!!
背景看着像一个矩形带着弧度。那么就看Canvas是否有这样的api,答案是有的drawRoundRect,

 val center = (height / 2).toFloat()
 //  设置我们的矩形大小,宽和高就是我们从xml中获取得宽和高
 rectF.set(0f, 0f, width.toFloat(), height.toFloat())
 // 100 就是矩形弧度 
 canvas.drawRoundRect(rectF, 100f, 100f, paint)
 canvas.save()
 // 经过这个步骤就能实现我们蓝色得背景

那么接下来就是绘制我们得圆,圆形是好绘制,但是怎么确定它的位置呢?(就是这种运算所以我对自定义view不是很熟练)我们直接看代码

  // 必须先移动画布在绘制
  // isOpen是用来处理打开和关闭是圆移动的距离
  //  center就是我们圆的半径,当往右移动的时候距离就是我们的一个宽度减去我们圆的直径,就能达到红色背景图的效果
     var tr = if (isOpen) width.toFloat() - center * 2 else 0f
     canvas.translate(tr, 0f)
     paint.color = Color.WHITE
     // 绘制我们的圆,半径减去5 是为了留点空隙。
     // 第一个参数和第二个参数 合起来表示圆心起点位置  再加上第三个参数 起点位置以center - 5半径开始绘制圆
     canvas.drawCircle(
           center, center, center - 5, paint
        )

起点位置
在这里插入图片描述
最终效果

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值