美文网首页
Android中的点击事件--双击事件

Android中的点击事件--双击事件

作者: __Witness | 来源:发表于2020-06-08 15:12 被阅读0次
    近期,在做公司的项目中,接到一个需求(app中首页下方的tab按钮选择时,单击切换tab,双击当前的tab页面内容滑动到顶部同时刷新数据)。总的来说,这个需求没有什么难度。
    • 单击 -- 使用Android系统提供的OnClickListener接口即可实现
    • 双击 -- Android系统中并未定义这类事件,所以需要我们自己定义。

    好了,话不多说,记录一下双击事件的定义。

    直接上代码。为双击点击事件命名为OnDoubleClickListener。让它实现View.OnTouchListener接口,重新onTouch方法。

    //记录点击次数
    private int count = 0;   
    //记录第一次点击时间           
    private long firstClick = 0;   
    //记录第二次点击时间           
    private long secondClick = 0;
    //两次点击时间间隔,单位毫秒
    private final int totalTime = 1000;
    //自定义回调接口,用于进行双击事件的回调给调用者
    private DoubleClickCallback mCallback;
    
    
    public interface DoubleClickCallback {
        void onDoubleClick();
    }
    
    public OnDoubleClickListener(DoubleClickCallback callback) {
        super();
        this.mCallback = callback;
    }
    
    /**
     * 触摸事件处理
     */
    @SuppressLint("ClickableViewAccessibility")
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (MotionEvent.ACTION_DOWN == event.getAction()) {//按下
            count++;
            if (1 == count) {
                firstClick = System.currentTimeMillis();//记录第一次点击时间
            } else if (2 == count) {
                secondClick = System.currentTimeMillis();//记录第二次点击时间
                if (secondClick - firstClick < totalTime) {//判断二次点击时间间隔是否在设定的间隔时间之内
                    if (mCallback != null) {
                        mCallback.onDoubleClick();
                    }
                    count = 0;
                    firstClick = 0;
                } else {
                    firstClick = secondClick;
                    count = 1;
                }
                secondClick = 0;
            }
        }
        return true;
    }
    

    具体的实现思路就是记录两次MotionEvent.ACTION_DOWN事件触发的时间点,然后计算他们两个事件的时间差值,如果这个时间差值小于totalTime(自己定义的时间差参考值)则属于双击事件,否则为单击事件。

    在需求中存在的问题: 因为tab的点击事件中,同时要有单击事件和双击事件。按照自定义双击事件的逻辑(当点击一下后,需要等到自己定义的时间差值后,才能确定本次事件是单机和双击),所以造成的缺陷问题就是,单击tab需要等一个时间差值后,事件的回调函数才会触发,页面才会切换。双击事件的回调无明显问题。

    相关文章

      网友评论

          本文标题:Android中的点击事件--双击事件

          本文链接:https://www.haomeiwen.com/subject/wlgazhtx.html