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);
}
Android 使用 OnTouchListener 接口监听双击或多击事件的更多相关文章
- Android实现监听控件点击事件
Android实现监听控件点击事件 引言 这篇文章主要想写一下Android实现监听点击事件的几种方法,Activity和Fragment实现起来有些方法上会有些不同,这里也略做介绍. 最近一直在忙一 ...
- Android监听消息通知栏点击事件
Android监听消息通知栏点击事件 使用BroadCastReceiver 1 新建一个NotificationClickReceiver 类,并且在清单文件中注册!! public class N ...
- 监听tableview的点击事件
// 监听tablview的点击事件 - (void)addAGesutreRecognizerForYourView { UITapGestureRecognizer *tapGesture = [ ...
- highcharts图表组件入门教程:如何监听柱状图柱子点击事件动态更新当前数据点数值和所对应X轴刻度
highcharts图表组件入门教程:如何监听柱状图柱子点击事件动态更新当前数据点数值和所对应X轴刻度 作者:highcharts | 时间:2014-6-11 14:07:05 | [小 大] | ...
- Android 监听按钮的点击事件
onClick事件1.Button和ImageButton都拥有一个onClick事件 通过自身的.setOnClickListener(OnClickListener)方法添加点击事件2.所有的控件 ...
- Android控件——监听按钮的点击事件
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAroAAAFTCAIAAABZPDiZAAAgAElEQVR4nOy9918UWfb///1jdu2uBs
- cocos2d-x JS 弹出对话框触摸监听(吞噬点击事件遮挡层)
在游戏中,我们经常会碰到一些弹窗,这些弹窗禁止点透,也就是禁止触摸事件传递到底层,我们称之为遮挡层,这些遮挡层,需要开发遮挡层,我们首先得了解cocos2d-js的触摸传递机制. 根据官方文档,我们可 ...
- Android 设置软键盘搜索键以及监听搜索键点击事件
如图所示,有时候为了布局美观,在搜索时没有搜索按钮,而是调用软件盘上的按钮.调用的实现只需要在XML在输入框中加入android:imeOptions="actionSearch" ...
- 监听grid行点击事件
随机推荐
- [WPF]启动参数
在App.xaml.cs中重写方法OnStartup protected override void OnStartup(StartupEventArgs e) { //e.Args为命令行参数 // ...
- 配置nginx支持TP框架
TP框架配置中默认URL_MODEL=1,而Nginx默认是不支持PATHINFO的.如果我们只想跑起来tp框架,很简单,只需到更改TP配置,设置URL_MODEL=3(兼容模式).但是如果要让Ngi ...
- OWASP TOP10(2017)
原文链接:https://www.t00ls.net/viewthread.php?from=notice&tid=39385
- 关于Vue的nextTick的一点小理解
官方文档表示:为了在数据变化之后等待Vue完成更新DOM,可以在数据变化之后立即执行Vue.$nextTick(callback),这样回调函数就可以在数据变化之后立即执行. 这段话的意思是: 例如: ...
- Spring之Method Injection
对于Spring的多数用户而言,主要的Bean存在形式都是单例,当一个单例需要结合另一个单例协作或者一个非单例与另一个非单例协作时,典型的做法是通过属性的形式注入,但是当两个Bean的声明周期不同时候 ...
- OpenCV——SURF特征检测、匹配与对象查找
SURF原理详解:https://wenku.baidu.com/view/2f1e4d8ef705cc1754270945.html SURF算法工作原理 选择图像中的POI(Points of i ...
- setattr
setatt r给对象的属性赋值,若属性不存在,先创建再赋值 用法 setattr(object, name, values) object -- 对象. name -- 字符串,对象属性. valu ...
- C++之new和delete操作符
在C语言中的动态分配和释放内存的函数是malloc calloc 和 free , 而在C++中要用 new new[] delete delete[] 来申请动态空间和释放空间. 注意:的是new. ...
- Android使用动态代理搭建网络模块框架
1.Java中的动态代理相信大多数朋友都接触过,在此就不再赘述,如果有不明白的朋友,可以到网上搜一下(一搜一大堆,呵呵..) 2.本节主要阐述一下如何使用动态代理框架实现Android应用的瘦身开发. ...
- python 爬虫--同花顺-使用代理
1.http://www.goubanjia.com/ 在上面获取 使用http协议的公网IP和端口 参考:https://blog.csdn.net/qq_23934063/article/det ...