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的一些功能的

Android中实现双击事件有多种方法,其中一种是通过监听触摸事件来实现。可以使用以下代码来检测两次点击的时间间隔是否小于0.5秒,并将其视为双击事件: ``` mBtn1.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mLastTime = mCurTime; mCurTime = System.currentTimeMillis(); if (mCurTime - mLastTime < 500) { Toast.makeText(MainActivity.this, "这就是传说中的双击事件", 1).show(); return true; } break; default: break; } return false; } }); ``` 此外,你也可以在OnClickListener中实现双击事件。以下是一个示例代码: ``` mBtn1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mLastTime = mCurTime; mCurTime = System.currentTimeMillis(); if (mCurTime - mLastTime < 500) { Toast.makeText(MainActivity.this, "这就是传说中的双击事件", 1).show(); } } }); ``` 另外,如果你想过滤掉单击事件,你可以将长按事件的返回值改为true。这样可以避免单击事件继续向下传播。以下是一个示例代码: ``` btn.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { // 处理长按事件 return true; } }); ``` 这些方法可以帮助你在Android应用中实现双击事件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [android实现双击事件暨多击事件详解](https://blog.csdn.net/wei18359100306/article/details/40687381)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [Android之按钮点击事件(单击、双击、长按等)](https://blog.csdn.net/zbw1185/article/details/94412673)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值