gpt4 book ai didi

Android首先检测双击而不是单击

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:09:02 33 4
gpt4 key购买 nike

我想检测双击但不首先触发单击。我试过双击监听器,但在检测到双击之前你总是会得到一个 onSingleTapUp,我想这是合理的。但在我的应用程序中,我真的不希望在途中双击时单击回调。

我意识到没有应用程序可以预测 future (否则我会非常富有)但我在想,只要单击一下就启动一个计时器,如果在一段时间内没有双击,那么就单击一下。但这似乎不起作用,因为一旦我启动计时器并且计时器正在运行,第二次点击就不会生成事件。这是我使用 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。我在 doInBackground 中的测试超时是 1 秒,所以我有很多时间进行第二次点击。注意 Log.d("KitView", "onSingleTapUp DONE");第一次点击时立即运行,因此 onSingleTapUp 没有挂起。

问题是,在 1 秒内再次敲击没有任何作用。在 sleep 结束并且 onPostExecute 运行之前,不会调用 onSingleTapUp。所以 Log.d("KitView", "TASK RUNNING");从来没有发生过,我当然会检测到双击与单击。

我不确定为什么 aynctask 会阻止事件,有什么想法吗?谢谢

最佳答案

我对您要实现的目标感到困惑。当单击发生时,双击方法 onDoubleTap() 不会被调用。另一方面,对于每次双击都有两个关联的单击 onSingleTapUp() 方法调用。

如果要区分它们,可以使用onSingleTapConfirmed(),当手势检测器确定点击是单次时触发。请参阅引用资料:

Notified when a single-tap occurs.

Unlike OnGestureListener.onSingleTapUp(MotionEvent), this will only be called after the detector is confident that the user's first tap is not followed by a second tap leading to a double-tap gesture

然后,您可以结合使用此方法调用和 boolean 标志来检测任何类型的单击/双击。

关于Android首先检测双击而不是单击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14724234/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com