关于Android 点击防抖动处理

简介: 双击跟抖动看似一样,其实不是,双击是一个完整的事件,短时间内监听到两次点击事件,两次点击事件过后,才回去处理逻辑,比如弹出一个提示框,前提条件是一定要有两次点击事件之后。而抖动是短时间内,两次点击事件都在处理逻辑,相当于逻辑处理了两次。

我们使用app的时候,经常会因为某些原因出现双击的情况,比如点击一个按钮会弹出一个提示框,但是如果我们快速的点击按钮两次,这个时候会出现两个提示框。

双击跟抖动看似一样,其实不是,双击是一个完整的事件,短时间内监听到两次点击事件,两次点击事件过后,才回去处理逻辑,比如弹出一个提示框,前提条件是一定要有两次点击事件之后。而抖动是短时间内,两次点击事件都在处理逻辑,相当于逻辑处理了两次。

简单的说就是,双击后,逻辑只运行一次,而抖动是,双击之后逻辑运行两次,其实抖动不止两次,也可以是多次,就看段时间内能触发到多少次的问题了。

那么,像上面说的,连续弹出两个提示框肯定是不行的,所以要防抖动,如何防抖动呢,与上面解释的相对应,原理就是段时间内触发事件的次数,只处理最后一次,忽略前面的多次。

这个时候就需要规定一个时间间隔了,也就是这个短时间具体是多差,按照触发响应机制的时间,一般定为1000毫秒或者800毫秒,有时候换加上对是否是同一个按钮的判断,也就是判断按钮id是否是一致。

代码实现起来其实很简单,如下:

/**
 * 防止按钮多次点击
 */
public class NoShakeBtnUtil {
 
    private static long lastClickTime = 0;
    private static long DIFF = 1000;
    private static int lastButtonId = -1;
 
    /**
     * 判断两次点击的间隔,如果小于1000,则认为是多次无效点击
     *
     * @return
     */
    public static boolean isFastDoubleClick() {
        return isFastDoubleClick(-1, DIFF);
    }
 
    /**
     * 判断两次点击的间隔,如果小于1000,则认为是多次无效点击
     *
     * @return
     */
    public static boolean isFastDoubleClick(int buttonId) {
        return isFastDoubleClick(buttonId, DIFF);
    }
 
    /**
     * 判断两次点击的间隔,如果小于diff,则认为是多次无效点击
     *
     * @param diff
     * @return
     */
    public static boolean isFastDoubleClick(int buttonId, long diff) {
        long time = System.currentTimeMillis();
        long timeD = time - lastClickTime;
        if (timeD < 0) {
            return false;
        }
        if (lastButtonId == buttonId && lastClickTime > 0 && timeD < diff) {
            return true;
        }
        lastClickTime = time;
        lastButtonId = buttonId;
        return false;
    }
}
相关文章
|
6月前
|
XML Android开发 数据格式
android点击FrameLayout、LinearLayout等父布局没响应的原因以及解决方案
android点击FrameLayout、LinearLayout等父布局没响应的原因以及解决方案
182 2
|
6月前
|
测试技术 Android开发
Android按钮防抖动,避免发送多次请求
Android按钮防抖动,避免发送多次请求
116 0
|
6月前
|
Java Android开发
Android Studio入门之按钮触控的解析及实战(附源码 超详细必看)(包括按钮控件、点击和长按事件、禁用与恢复按钮)
Android Studio入门之按钮触控的解析及实战(附源码 超详细必看)(包括按钮控件、点击和长按事件、禁用与恢复按钮)
731 0
|
3月前
|
Android开发
AutoX——当Android中clickable属性显示为false,实际可点击的布局如何处理
AutoX——当Android中clickable属性显示为false,实际可点击的布局如何处理
60 0
|
5月前
|
安全 JavaScript 前端开发
kotlin开发安卓app,JetPack Compose框架,给webview新增一个按钮,点击刷新网页
在Kotlin中开发Android应用,使用Jetpack Compose框架时,可以通过添加一个按钮到TopAppBar来实现WebView页面的刷新功能。按钮位于右上角,点击后调用`webViewState?.reload()`来刷新网页内容。以下是代码摘要:
|
6月前
|
存储 Android开发
Android 解决USB TP驱动中触摸卡顿和防抖动问题
Android 解决USB TP驱动中触摸卡顿和防抖动问题
183 1
|
6月前
|
人工智能 测试技术 Android开发
Android实现点击链接跳转功能
Android实现点击链接跳转功能
140 1
|
6月前
|
XML Java Android开发
Android每点击一次按钮就添加一条数据
Android每点击一次按钮就添加一条数据
60 1
|
Android开发
Android button 点击跳转页面
Android button 点击跳转页面
Android button 点击跳转页面
|
6月前
|
Android开发
解决在Android Compose中点击空白处收回软键盘
解决在Android Compose中点击空白处收回软键盘
219 0
下一篇
无影云桌面