咱们这个开关如何优雅的实现触发点击事件,但是不要进行checked状态切换?
Closed this issue · 3 comments
liyuhaolol commented
有时候有些需求,是要先前置判断一些东西,后续才会判断开关是否会进行checked状态切换。但是咱们的开关会无脑响应点击事件进行checked状态切换。我搜索远古的issues,似乎要重写onTouchEvent屏蔽父类的onPerformClick才能实现类似逻辑。请问现在有什么更优雅的办法来达到这个目的么???
kyleduo commented
目前没有直接支持的API,可以试试这两种方法:
- 继承SwitchButton然后重写
performClick
是个方法,根据逻辑延迟调用performClick
。 - 在
OnCheckedChangeListener
的回调中拦截一下事件,先用setCheckedImmediately
把状态重置,然后根据逻辑再调用一次setChecked
或者performClick
。
liyuhaolol commented
目前没有直接支持的API,可以试试这两种方法:
- 继承SwitchButton然后重写
performClick
是个方法,根据逻辑延迟调用performClick
。- 在
OnCheckedChangeListener
的回调中拦截一下事件,先用setCheckedImmediately
把状态重置,然后根据逻辑再调用一次setChecked
或者performClick
。
嗯,最后我采取了您给的方案1解决了这个需求,添加了一个新的ClickListener,当onClick返回true时才会调用父类的performClick进行checked状态切换。
部分代码如下:
override fun performClick(): Boolean {
var canSwitch = listener?.onClick()
if (canSwitch == null){
canSwitch = true
}
if (canSwitch){
return super.performClick()
}else{
animateToState(isChecked)//刷新UI,避免出现颜色错乱问题
}
return false
}
目前功能是正常的,只是点击的时候依然会触发thumb的变色。目前没找到如何控制这个小白点的变色问题。
kyleduo commented
可以试试手动调用一下refreshDrawableState
方法。