我想检测双击但不先触发单击。我试过双击监听器,但你总是在检测到双精度之前得到一个 onSingleTapUp,我猜这是合理的。但在我的应用程序中,我真的不希望在途中双击时单击回调。
我意识到没有应用程序可以预测未来(或者我会非常富有),但我在想,只需单击一下就启动一个计时器,如果在一段时间内没有双击,然后单击。但这似乎不起作用,因为一旦我启动计时器并且计时器正在运行,第二次点击永远不会产生事件。这是我使用 aync 任务的代码,我也用计时器尝试过。
mGD = new GestureDetector(getContext(), new SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent ev) {
//Log.d("KitView", "onSingleTapUp "+ev.toString());
class DblTapTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
Log.d("KitView", "onPreExecute");
}
protected Void doInBackground(Void... args) {
Log.d("KitView", "doInBackground");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Void result) {
Log.d("KitView", "onPostExecute");
doSigleTapAction();
mDblTapTask=null;
}
};
if(mDblTapTask==null) {
Log.d("KitView", "START TASK");
mDblTapTask = new DblTapTask();
mDblTapTask.execute();
} else {
Log.d("KitView", "TASK RUNNING");
doDoubleTapAction();
}
Log.d("KitView", "onSingleTapUp DONE");
return true;
} // end onSingleTapUp
}); // end new GestureDetector
在这个例子中,我在第一次点击时得到了 onSingleTapUp。我的超时时间是 1 秒,用于在 doInBackground 中进行测试,所以我有很多时间来进行第二次点击。注意 Log.d("KitView", "onSingleTapUp DONE"); 立即运行我第一次点击,所以 onSingleTapUp 没有挂起。
问题是,在 1 秒内再次录音无济于事。在睡眠完成并且 onPostExecute 运行之前,不会调用 onSingleTapUp。所以 Log.d("KitView", "TASK RUNNING"); 永远不会发生,这是我当然会检测到双击与单击的地方。
我不确定为什么 aynctask 会阻止事件,有什么想法吗?谢谢