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

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() {
				
	@Override
	public 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;
		}
	};
			
	@Override
	public 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后运行run
			break;
		}
		return false;
	}
});
逻辑上我们可以先看onTouch方法,当第一个action_up事件产生的时候视为一次点击,接着将点击次数累加同时执行postdelayed,当延迟时间过去后,执行run方法定义的内容,run方法查看当下点击数量,若为1,则是单击,其它则是多次点击。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值