我的問題很簡單,實現GestureListener時onUp事件是哪裏?手勢檢測器上的OnUp事件
我在gesturedetector上有很多事件,並且不能僅僅使用偵聽器的onUp事件,導致事件之一是需要它的onSingleTapConfirmed。
我的問題很簡單,實現GestureListener時onUp事件是哪裏?手勢檢測器上的OnUp事件
我在gesturedetector上有很多事件,並且不能僅僅使用偵聽器的onUp事件,導致事件之一是需要它的onSingleTapConfirmed。
嘗試使用onFling()
。看起來像一個奇怪的名字,但對我來說,它的工作原理是onUp()
方法將在邏輯上起作用。或者試試這個方法...
@Override
public boolean onTouchEvent(MotionEvent me) {
Log.v("ADAM", "ontouch: " + me.getAction());
if(me.getAction() == 0){
Log.v("ADAM", "Down");
}
else if (me.getAction() == 1) {
Log.v("ADAM", "Up");
}
else if (me.getAction() == 2) {
Log.v("ADAM", "Scroll");
}
boolean detectedUp = event.getAction() == MotionEvent.ACTION_UP;
if (!mGestureDetector.onTouchEvent(event) && detectedUp) {
return onUp(event);
}
return true;
}
我在通過GestureListener之前閱讀通風口來解決這個問題(onFling絕對無用) – 2011-05-19 22:47:34
很好的答案,只是想補充說onFling並不是完全沒用 - 它可以幫助您區分滾動和滑動。雖然當你認爲你只是舉起手指時,經常會發生一些事情,但你可以通過檢查onFling處理程序中的速度參數來篩選出不重要的。 – 2012-02-06 06:27:30
當您執行滑動操作時,並不總是發生OnFling事件。最值得注意的是,如果你在刷完之前輕掃但停止移動你的手指一會兒,通常就沒有事件發生。 – 2012-11-08 00:59:38
我通過閱讀Action event
固定它之前,我把它傳遞給GestureListener
img.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
if (arg1.getAction() == MotionEvent.ACTION_UP
&& !getDocument().isScaled())
img.notifyUp();
return gestures.onTouchEvent(arg1);
}
});
你從你在GestureDetector.OnGestureListener消耗其他事件返回真?我遇到了這個問題,事實證明如果你返回false,那麼系統假定你不感興趣並且不會傳遞你的事件,所以你錯過了!
其他答案可以解決這個問題,也許他們工作很好,但我不認爲這些問題是很好的解決方案。
因爲我們應該在單個模塊中處理事件,所以我們可以保持或擴展代碼。
(順便說一下,不要不使用onFilng()
,如果你的手指在屏幕上緩慢移動,onFilng()
將無法正常工作)
所以,我的解決辦法是改寫GestureDetector:
public class ModifyGestureDetector extends GestureDetector {
MyGestureListener myGestureListener;
public ModifyGestureDetector(Context context, OnGestureListener listener) {
super(context, listener);
init(listener);
}
void init(OnGestureListener listener){
if (listener instanceof MyGestureListener){
myGestureListener = (MyGestureListener) listener;
}
}
//u can write something more complex as long as u need
@Override
public boolean onTouchEvent(MotionEvent ev) {
if(ev.getAction() == MotionEvent.ACTION_UP
&& myGestureListener != null){
myGestureListener.onUp(ev);
}
return super.onTouchEvent(ev);
}
public interface MyGestureListener{
public void onUp(MotionEvent ev);
}
}
與聽者:
public class MyGestureListener extends GestureDetector.SimpleOnGestureListener
implements ModifyGestureDetector.MyGestureListener {
@Override
public void onUp(MotionEvent ev) {
//do what u want
}
}
:)
我不是很確定你想在這裏做什麼,但有'onSingleTapUp'在'g^estureListener'這可能是你在找什麼。儘管如此,它還是被完全點燃了,而不是輕掃。爲此,您可以只處理視圖/活動的「原始」onTouchEvent而不傳遞給「GestureDetector」。 – Xion 2011-04-19 22:09:25
點擊完成後,會觸發onSingleTapUp。我需要DOWN,然後MOVE,然後以UP結束。 – 2011-04-19 23:15:22
這是'onFling',除了你沒有得到MOVE事件。如果你需要它們,我想你唯一的選擇就是直接處理'onTouchEvent'。 – Xion 2011-04-20 07:31:17