Android:view的双击监听

自定义OnMultiTouchListener抽象类实现OnTouchListener接口

import android.os.Handler;
import android.view.MotionEvent;
import android.view.View;

import java.util.concurrent.atomic.AtomicInteger;

public abstract class OnMultiTouchListener implements View.OnTouchListener {

    /**
     * 手势监听的模式(down--->0    up--->1)
     */
    private int mActionMode;


    /**
     * 双击间隔 可设置
     */
    private long mIntervalTime = 200;


    /**
     * 上次 onTouch 发生的时间
     */
    private long lastTouchTime = 0;
    /**
     * 已经连续 touch 的次数
     */
    private AtomicInteger touchCount = new AtomicInteger(0);

    private Runnable mRun = null;
    private Handler mHandler = new Handler();

    pubilc void removeCallback() {
        if (mRun != null) {
            mHandler.removeCallbacksAndMessages(null);
            mRun = null;
        }
    }

    

    public OnMultiTouchListener(){

    }

    public OnMultiTouchListener(int actionMode){
        mActionMode = actionMode;
    }

    public OnMultiTouchListener(long intervalTime){
        mIntervalTime = intervalTime;
    }

    public OnMultiTouchListener(long intervalTime,int actionMode){
        mIntervalTime = intervalTime;
        mActionMode = actionMode;
    }


    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == mActionMode){
            final long now = System.currentTimeMillis();
            lastTouchTime = now;

            touchCount.incrementAndGet();
            //每点击一次就移除上一次的延迟任务,重新布置一个延迟任务
            removeCallback();

            mRun = () -> {
                //两个变量相等,表示时隔 multiTouchInterval之后没有新的touch产生, 触发事件并重置touchCount
                if (now == lastTouchTime) {
                    onMultiTouch(v, event, touchCount.get());
                    if (touchCount.get() == 1){
                        onSingleClick(v,event);
                    } else if (touchCount.get() == 2){
                        onDoubleClick(v,event);
                    }
                    touchCount.set(0);
                }
            };

            mHandler.postDelayed(mRun, getMultiTouchInterval());
        }

        return true;
    }

    /**
     * 连续touch的最大间隔, 超过该间隔将视为一次新的touch开始, 默认是200
     *
     * @return
     */
    private long getMultiTouchInterval() {
        return mIntervalTime;
    }



    public abstract void onSingleClick(View view, MotionEvent event);
    public abstract void onDoubleClick(View view, MotionEvent event);
    public abstract void onMultiTouch(View view, MotionEvent event,int count);

}

自定义监听器提供四种构造方法

1:空参构造(默认MotionEvent为Down,即按下生效;默认双击间隔为200ms)

view.setOnTouchListener(new OnMultiTouchListener() {
    @Override
    public void onSingleClick(View view, MotionEvent event) {
        mTvShow.setText("单击");
    }

    @Override
    public void onDoubleClick(View view, MotionEvent event) {
        mTvShow.setText("双击");
    }

    @Override
    public void onMultiTouch(View view, MotionEvent event, int count) {

    }
});

2:int类型 (可设置MotionEvent,MotionEvent.DOWN(0)或者MotionEvent.UP(1) ;默认双击间隔为200ms)

...

3:long类型(可设置双击间隔时长; 默认MotionEvent.DOWN(0))

...

4:双参构造(可设置MotionEvent(int类型)和间隔时长(long类型))

...

参考别人的博客做出一些修改,感谢!

原文链接:Android实现双击事件的两种方式 - Mosthink - 博客园

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Android监听 View双击事件,可以使用 GestureDetector 来实现。以下是一个示例: 1. 创建一个 GestureDetector 对象并实现 OnGestureListener 接口: ```java GestureDetector gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { @Override public boolean onDoubleTap(MotionEvent e) { // 在双击事件发生时执行相应的操作 return true; } }); ``` 在上述代码中,`context` 是当前上下文对象。我们创建了一个 GestureDetector 对象,并实现了 OnGestureListener 接口中的 onDoubleTap() 方法,该方法中可以执行双击事件发生时需要执行的操作。 2. 将触摸事件传递给 GestureDetector: ```java view.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return gestureDetector.onTouchEvent(event); } }); ``` 在上述代码中,我们将触摸事件传递给 GestureDetector 的 onTouchEvent() 方法。这样,GestureDetector 将负责处理触摸事件,并在双击事件发生时调用 onDoubleTap() 方法。 3. 在需要监听双击事件的 View 上设置上述触摸监听器: ```java View view = findViewById(R.id.your_view_id); view.setOnTouchListener(onTouchListener); ``` 在上述代码中,`R.id.your_view_id` 是要监听双击事件的 View 的 ID,您需要将其替换为实际的 View ID。 通过以上步骤,您可以在 Android监听 View双击事件,并在双击发生时执行相应的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值