android实现双击监听

原创 2017年01月03日 15:16:39

方案的优势:

1.灵活性高。不需要继承自View或者其子类。

2.对单击的误触进行了识别。

3.本身已经具备了双击,单击的识别机制,不必担心与原有接口的协调问题。

4.可调整单击与双击识别的时间值。


用法:

1.实例化VulcanTouchProcessor类。设置合适的监听器,以及双击的时间(单位毫秒)

2.在你的View(或者子类)的onTouch回调中调用VulcanTouchProcessor的notifyTouchUp方法

3.当双击事件触发,上述设定的监听器会被调用。


用法示例代码(其中的mTouchProcessor需要先行实例化):

        view.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if(MotionEvent.ACTION_UP == event.getAction()) {
                    mTouchProcessor.notifyTouchUp(v,null);
                }
                return true;
            }
        });




功能实现代码如下:

package com.vulcan.vulcan;

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

/**
 * Created by vulcan on 2016/12/30.
 */

public class VulcanTouchProcessor {
    public static final int STATUS_READY = 0;
    public static final int STATUS_GOING_TO_DOUBLE = 1;
    public static final int STATUS_SLEEP = 2;//in sleep status, we do not process any key.


    public static final long DEFAULT_DOUBLE_TAP_TIME_MS = 300;

    public VulcanTouchProcessor(VulcanTouchListener l) {
        mTouchListener = l;
    }

    public VulcanTouchProcessor(VulcanTouchListener l, long doubleTapTimeMs) {
        this(l);
        mTimeMsOfDoubleTap = doubleTapTimeMs;
    }

    public boolean notifyTouchUp(View v, Object extra) {
        mLastTouchedView = v;
        mExtraObject = extra;
        if(STATUS_READY == mStatus) {
            mStatus = STATUS_GOING_TO_DOUBLE;
            setTimer(mTimeMsOfDoubleTap);
            return true;
        }
        else if(STATUS_GOING_TO_DOUBLE == mStatus) {
            mStatus = STATUS_SLEEP;
            setTimer(mTimeMsOfSleep);
            mTouchListener.onDoubleClick(v, extra);
            return true;
        }
        else if(STATUS_SLEEP == mStatus) {
            return true;
        }
        return true;
    }

    private void notifyTimeout() {
        if(STATUS_READY == mStatus) {
            cancelTimer();
        }
        else if(STATUS_GOING_TO_DOUBLE == mStatus) {
            mTouchListener.onSingleClick(mLastTouchedView, mExtraObject);
            setTimer(mTimeMsOfSleep);
            mStatus = STATUS_SLEEP;
        }
        else if(STATUS_SLEEP == mStatus) {
            cancelTimer();
            mStatus = STATUS_READY;
        }

        return;
    }

    private void setTimer(long delayMs) {
        mHandler.removeCallbacks(mTimeoutCallback);
        mHandler.postDelayed(mTimeoutCallback, delayMs);
    }

    private void cancelTimer() {
        mHandler.removeCallbacks(mTimeoutCallback);
    }

    private Runnable mTimeoutCallback = new Runnable() {
        @Override
        public void run() {
            notifyTimeout();
        }
    };

    private long mTimeMsOfSleep = 250;
    private long mTimeMsOfDoubleTap = DEFAULT_DOUBLE_TAP_TIME_MS;
    private Object mExtraObject;
    private View mLastTouchedView;
    private int mStatus = STATUS_READY;
    private VulcanTouchListener mTouchListener;
    private Handler mHandler = new Handler(Looper.getMainLooper());
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

android实现双击监听

优势: 1.灵活性高。不需要继承自View或者其子类。 2.对单击的误触进行了识别。 3.本身已经具备了双击,单击的识别机制,不必担心与原有接口的协调问题。 4.可调整单击与双击识别的时间值。 代...
  • hhdsyxwei
  • hhdsyxwei
  • 2017年01月03日 15:16
  • 1072

android 实现button单击双击事件同时监控

java代码部分 package com.xpc.doubleclick; import android.os.Bundle; import android.app.Activity; import ...
  • fishorbird
  • fishorbird
  • 2015年10月27日 19:03
  • 1604

从头学android_双击事件(多击事件)的算法

双击事件的算法android 中提供了click事件,但是没有提供doubleClick事件,如需要使用,需要程序员自定义doubleClick方法。 其实这也不算太难,双击不过就是在很短时间内的多...
  • Mr_Seng
  • Mr_Seng
  • 2016年08月02日 12:05
  • 1761

android实现双击事件监听

class onDoubleClick implements View.OnTouchListener{ int count; long firClick; long secClick; ...
  • xuanzeticai
  • xuanzeticai
  • 2014年10月09日 12:38
  • 206

android在web view中使用onTouch监听双击屏幕

  • 2017年08月31日 14:04
  • 2.12MB
  • 下载

Android view的单击,双击,长按事件监听

关于view的双击事件,网上有很多demo使用GestureDetector ,在给view setOnTouchListener的时候插入。我试了下,onDoubleTap onSingleTap等...
  • qq_31390699
  • qq_31390699
  • 2017年05月24日 20:56
  • 315

android双击返回键退出应用(三种实现方法)

  • 2014年10月25日 16:20
  • 979KB
  • 下载

Android 实现双击

  • 2014年06月27日 14:19
  • 1014KB
  • 下载

Android双击屏幕动态实现全屏(隐藏标题栏状态栏)

  • 2017年08月31日 16:20
  • 2.12MB
  • 下载

javaGUI中 随机生成一组位置不同的按钮 并对JButton的左键、右键、双击的监听

public static int[][] getRandomLocation(int paneWidth,int panelHeight,int n,int blcokWidth,int block...
  • springlustre
  • springlustre
  • 2016年03月31日 19:44
  • 660
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android实现双击监听
举报原因:
原因补充:

(最多只允许输入30个字)