Android中view控件双击事件的捕捉

来源:互联网 发布:cdr可变数据 编辑:程序博客网 时间:2024/05/23 19:16

Android控件中获取双击事件的获取有时候挺折磨人的。我们可以通过控件的TouchEvent和view的postdelayed来判断控件是否被双击。

TouchEvent是来捕捉控件view被触摸的状态,手指按下,手指离开等,postdelayed方法则是用来在一定时间后来查看控件被点击了几次,以判断是单击或双击事件。整个过程是:1.第一次点击,点击次数为1,然后开始等待一定时间(视为双击的时间如0.5s)2.等待期间每次点击,计数加一 3.等待时间到,查看点击次数,得出结果。

代码示例:

以webview为例

webview.setOnTouchListener(new OnTouchListener() {long lastClickUpTime = 0;long curClickUpTime = 0;long CLICK_SPACING_TIME = 500;<span style="white-space:pre"></span>int clickcount = 0;Runnable mRunnable = new Runnable() {@Overridepublic void run() {<span style="white-space:pre"></span>if(clickcount <= 1)//单击<span style="white-space:pre"></span>System.out.println("webview one click " + clickcount);else//双击System.out.println("webview click " + clickcount);clickcount = 0;}};@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:break;case MotionEvent.ACTION_UP:lastClickUpTime = curClickUpTime;curClickUpTime = System.currentTimeMillis();if ((curClickUpTime - lastClickUpTime < CLICK_SPACING_TIME)) {//是双击需取消第二次点击的那个线程//System.out.println("webview double click " + (curClickUpTime-lastClickUpTime));v.removeCallbacks(mRunnable);}clickcount++;v.postDelayed(mRunnable, CLICK_SPACING_TIME);//延迟CLICK_SPACING_TIME后运行runbreak;}return false;}});
逻辑上我们可以先看onTouch方法,当第一个action_up事件产生的时候视为一次点击,接着将点击次数累加同时执行postdelayed,当延迟时间过去后,执行run方法定义的内容,run方法查看当下点击数量,若为1,则是单击,其它则是多次点击。

0 0
原创粉丝点击