自定义view系列(7)--SwitchView

这篇博客详细介绍了如何实现一个自定义的SwitchView组件,包括需求分析、实现思路、最终效果展示。组件支持四种状态,具有锁定功能,允许用户点击或滑动切换状态,并有相应的回调机制。博客还涵盖了测量、绘制、事件处理等关键代码分析。
摘要由CSDN通过智能技术生成

需求描述

草图如下:

草图

公司产品的新版本中要实现一个效果,需求如下:
- 定义4种状态:未知-休息-上班-下班
- 要锁定‘未知’状态,锁定之后,未知状态不可点击
- 用户可以点击除了锁定状态的之外的任意状态,滑块自动滑动到指定状态并触发回调去请求接口,如果请求失败,则控制滑块再滑动到之前的位置。
- 用户可以滑动滑块到任意位置,如果滑动到锁定状态,要再次滑动重置到之前的状态。如果滑动到其他位置,则触发回调去请求接口,如果请求失败,则控制滑块再滑动到之前的位置。
- 如果滑块滑动到两个状态之间,则松开手之后,滑块要自动滑动到距离最近的状态上,然后触发回调去请求接口,如果请求失败,则控制滑块再滑动到之前的位置。

实现思路

  1. 由于既有点击操作又有滑动操作,且要实现滑块与下方文本的解耦,所以选择继承ViewGroup实现,这里选择继承LinearLayout。
  2. 文本内容直接使用canvas绘制
  3. 对于锁定位置直接把事件拦截掉
  4. 使用属性动画进行相关的滑动
  5. 剩下的就是一些具体的逻辑处理

最终实现的效果

默认效果

默认效果

自定义文本及字体颜色、大小

效果1

自定义插值器,锁定位置(锁定位置为2),滑动时不展示文本

效果2

所有可用API及作用

API API调用时机 对应的xml属性 作用
setOnSelectedClickListener(OnItemSelectedListener listener) view初始化后的任意时刻 设置item选中监听
setScrollEnable(boolean scrollEnable) view初始化后的任意时刻 app:scrollEnable=”boolean” 设置是否禁用滑动手势【true:不禁用;false:禁用;默认为true】
smoothScrollTo(int position) 需要动态滑动时调用 平滑移动到指定位置【注意与setDefaultSelectedPosition(int position)方法区分开来。】
setShowTextWhenScrolling(boolean isShowText) view初始化后的任意时刻 app:s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值