kyleduo/SwitchButton

咱们这个开关如何优雅的实现触发点击事件,但是不要进行checked状态切换?

Closed this issue · 3 comments

有时候有些需求,是要先前置判断一些东西,后续才会判断开关是否会进行checked状态切换。但是咱们的开关会无脑响应点击事件进行checked状态切换。我搜索远古的issues,似乎要重写onTouchEvent屏蔽父类的onPerformClick才能实现类似逻辑。请问现在有什么更优雅的办法来达到这个目的么???

目前没有直接支持的API,可以试试这两种方法:

  1. 继承SwitchButton然后重写performClick是个方法,根据逻辑延迟调用performClick
  2. OnCheckedChangeListener的回调中拦截一下事件,先用setCheckedImmediately把状态重置,然后根据逻辑再调用一次setChecked或者performClick

目前没有直接支持的API,可以试试这两种方法:

  1. 继承SwitchButton然后重写performClick是个方法,根据逻辑延迟调用performClick
  2. 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的变色。目前没找到如何控制这个小白点的变色问题。

可以试试手动调用一下refreshDrawableState方法。