关于android 双击事件

大家好,关于android双击事件 我相信大家都知道 API中是有个方法的,但是必须在Activity中在能使用。

对于到底用不用android 双击事件API各有各的看法。

在Activity中使用API

优点:省时省力,别人写的东西,直接用就行了,不担心有BUG

缺点:代码写在activity中 总感觉有些乱。

自己写个onDoubleClick方法

优点:自己写的东西,好控制,灵活性强,想放哪放哪。

缺点:需要消耗点时间,检查BUG之类的。

好了,最近我也遇到了需要处理双击事件的问题,我是这样处理的

我用了android的API 但是我也很好整理。

上代码吧,只有2个类 一个当然是Activity 另一个就是OnDoubleClick事件处理类

 1 import android.app.Activity;
 2 import android.os.Bundle;
 3 import android.view.GestureDetector;
 4 import android.view.MotionEvent;
 5 import android.view.View.OnTouchListener;
 6
 7 /**
 8  *
 9  * <p>class instruction:内部界面 核心Activity</p>
10  * create in 2011-12-2 @author Mercury
11  */
12 public class GameActivity extends  Activity {
13     GameActivityHelper helper;
14     private GestureDetector gd;
15     @Override
16     public void onCreate(Bundle savedInstanceState) {
17         super.onCreate(savedInstanceState);
18         helper=new GameActivityHelper(this);
19         helper.init();
20         setContentView(helper.getGameView());
21         gd=new GestureDetector(this,new OnDoubleClick());
22     }
23      @Override
24     public boolean onTouchEvent(MotionEvent event) {
25         return gd.onTouchEvent(event);
26     }
27 }

1 import android.view.GestureDetector;
2 import android.view.MotionEvent;
3
4 public class OnDoubleClick extends GestureDetector.SimpleOnGestureListener{
5 @Override
6 public boolean onDoubleTap(MotionEvent e) {
7 //TODO
8 return false;
9 }
10 // @Override
11 // public boolean onDoubleTapEvent(MotionEvent e) {
12 // return super.onDoubleTapEvent(e);
13 // }
14 }

代码也还算整洁。 API中对于双击有两种处理,

一种是双击后执行一次:onDoubleTap

一种是双击后执行两次:onDoubleTapEvent

这里我只需要双击后执行一次就行了,那里注释掉了

还有需要特别注意的是在自己的Activity中重写的父类Activity的方法

@Override public boolean onTouchEvent(MotionEvent event) {   return gd.onTouchEvent(event); } 这个方法。我在网上看到有很多人在Activity中 实现implements OnTouchListener 后会要求你重写onTouch方法来实现双击。

这完全是误导人的做法,本人亲自试过,双击是无效的,普通的点击还是有效 我是在SDK1.6版本中试的

这是个细节希望大家多注意下。

这里的onTouchEvent 是Activity中的方法,而不是实现某个接口而来的,这就是为什么只能在Activity中处理双击事件的原因,

如果你需要用androidAPI处理双击事件就必须重写Activity中的onTouchEvent 方法 否则与GestureDetector中有关的方法都无效

onTouch 只要实现了OnTouchListener接口的View或者Activity都必须重写的方法,他是不能实现GestureDetector的一些功能的

时间: 2024-11-09 05:07:01

关于android 双击事件的相关文章

Android 自定义View实现单击和双击事件

自定义View, 1. 自定义一个Runnable线程TouchEventCountThread ,  用来统计500ms内的点击次数 2. 在MyView中的 onTouchEvent 中调用 上面的线程 3. 自定义一个Handler, 在TouchEventHandler 中 处理 统计到的点击事件, 单击, 双击, 三击, 都可以处理 核心代码如下: public class MyView extends View { ...... // 统计500ms内的点击次数 TouchEvent

android判断双击事件(参考android源码,判断时间间隔和范围)

对于android的双击事件的判断,官方是已经给出解决办法的,主要是使用下面几个类或者接口:GestureDetector,OnGestureListener,OnDoubleTapListener,GestureDetector.SimpleOnGestureListener 对于它们的介绍以及用法很多了,就不说明了,大家可以参考下面的博客: http://blog.sina.com.cn/s/blog_77c6324101017hs8.html 需要特殊说明的是OnDoubleTapList

Android实现双击事件的两种方式

Work around的方法是先监听onTouch事件来监听连续点击次数,每次点击都布置一个间隔时间的延时任务,延时任务执行时判断间隔内是否还有点击,如果没有则发布点击次数,重置计数. 实现代码如下: /** * 连续点击事件监听器 可以用作双击事件 * */ public abstract class OnMultiTouchListener implements OnTouchListener { /** * 上次 onTouch 发生的时间 */ private long lastTouc

android实现双击事件暨多击事件详解

最近在多击事件上稍微研究了下,在此做简要分析,供大家吐槽参考 方法一: 将两次点击的时间间隔小于0.5s的默认为双击事件 <span style="font-family:SimSun;font-size:14px;">mBtn1.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getA

Android中为什么不提供双击事件的接口

附上文章链接:http://stackoverflow.com/questions/2217670/android-how-to-detect-double-tap 这句话讲出了原因:Implementing Double Touch will affect handling of single touches, because you'll have to wait to see if every single touch turns into a double touch before yo

[前端][自定义DOM事件]不使用setTimeout实现双击事件或n击事件

使用setTimeout实现双击事件 例如,这样: let div = document.getElementById("div"); doubleClick(div, function (event) { console.log('双击') }) function doubleClick(ele, fn) { // 省略参数合法性的判断 let event = new Event("doubleClick"); // 自定义双击事件(可以使用CustomEvent

Android触摸屏事件派发机制详解与源码分析二(ViewGroup篇)

1 背景 还记得前一篇<Android触摸屏事件派发机制详解与源码分析一(View篇)>中关于透过源码继续进阶实例验证模块中存在的点击Button却触发了LinearLayout的事件疑惑吗?当时说了,在那一篇咱们只讨论View的触摸事件派发机制,这个疑惑留在了这一篇解释,也就是ViewGroup的事件派发机制. PS:阅读本篇前建议先查看前一篇<Android触摸屏事件派发机制详解与源码分析一(View篇)>,这一篇承接上一篇. 关于View与ViewGroup的区别在前一篇的A

Android touch 事件传递机制

前言: (1)在自定义view的时候经常会遇到事件拦截处理,比如在侧滑菜单的时候,我们希望在侧滑菜单里面有listview控件,但是我们希望既能左右滑动又能上下滑动,这个时候就需要对触摸的touch事件进行拦截.这个时候我们就需要明白android touch 事件传递机制, (2)以前很多时候比较模糊,也许是网上看到也有很多事件传递的相关文章,但我看着头晕,解释不彻底,有的说得一半,总算不满足不满意,于是据我自己的理解来彻底的来整理下具体的是怎么个传递方式,分享给大家,希望大家看到有什么不对的

双击事件阻止点击事件

//定义setTimeout执行方法 var TimeFn = null; $DIV.on('click', function(){ // 取消上次延时未执行的方法 clearTimeout(TimeFn); TimeFn = setTimeout(function() { ...单击事件 },300); }); $DIV.on('dblclick', function(){ clearTimeout(TimeFn); ...双击事件 });