zoukankan      html  css  js  c++  java
  • Android 使用 OnTouchListener 接口监听双击或多击事件

    这里是使用 OnTouchListener 实现的监听双击 or 多击的监听器。通过 View.setOnTouchListener ,可以实现在任意 View 上监听双击事件。

    网上有许多文章简单的使用 OnTouchListener + 计数器自增 的方法实现,但该方法有个严重的弊端:连续三击会被当作一次双击和一次单机;连续四击会被当作两次双击,………… 原因就是无法分辨多次单击是连续的。

    下面是一个完整的实现,可以监听多击,且知道次数。

    import android.os.Handler;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.OnTouchListener;
    
    public abstract class MultiTouchListener implements OnTouchListener
    {
    	// 连续 touch 的最大间隔, 超过该间隔将视为一次新的 touch 开始
    	private long multiTouchInterval;
    	// 上次 onTouch 发生的时间
    	private long lastTouchTime;
    	// 已经连续 touch 的次数
    	private int touchCount;
    
    	public MultiTouchListener()
    	{
    		this(250);
    	}
    
    	public MultiTouchListener(long multiTouchInterval)
    	{
    		this.multiTouchInterval = multiTouchInterval;
    		this.lastTouchTime = 0;
    		this.touchCount = 0;
    	}
    
    	@Override
    	public boolean onTouch(final View v, final MotionEvent event)
    	{
    		if(event.getAction() == MotionEvent.ACTION_DOWN)
    		{
    			final long now = System.currentTimeMillis();
    			this.lastTouchTime = now;
    
    			synchronized(this) {
    				this.touchCount ++;
    			}
    
    			new Handler().postDelayed(new Runnable() {
    				@Override
    				public void run() {
    					// 两个变量相等, 表示时隔 multiTouchInterval 之后没有新的 touch 产生, 触发事件并重置 touchCount
    					if(now == MultiTouchListener.this.lastTouchTime) {
    						synchronized (MultiTouchListener.this) {
    							MultiTouchListener.this.onMultiTouch(v, event, MultiTouchListener.this.touchCount);
    							MultiTouchListener.this.touchCount = 0;
    						}
    					}
    				}
    			}, MultiTouchListener.this.multiTouchInterval);
    		}
    		return true;
    	}
    	
    	public abstract boolean onMultiTouch(View v, MotionEvent event, int touchCount);
    }
    

      

  • 相关阅读:
    String类可以被继承吗?我们来聊聊final关键字!
    微信小程序中使用阿里ICON图标
    兼容iphone x刘海的正确姿势
    解决ios下部分手机在input设置为readonly属性时,依然显示光标
    react jsx 中使用 switch case 示例
    react 中使用 JsBarcode 显示条形码
    解决IDEA输入法输入中文候选框不显示问题
    svn提交代码失败提示清理(清理失败并且报错信息乱码解决办法)
    css笔记
    修改Mysql数据库的字符集
  • 原文地址:https://www.cnblogs.com/ILove/p/3180532.html
Copyright © 2011-2022 走看看