2013-06-26 20 views
1

我遇到了標題中描述的問題,並想知道我是否做錯了什麼,或者這是另一個Android故障。以下是關於問題的更多信息: 我有一個圖像視圖,支持雙擊縮放和縮放縮放,但希望使用單個短按在操作欄中顯示圖像標題(實際調用getActionBar())。 show()和hide())。此外,帶有圖像的視圖位於ViewPager中(位於支持庫v4中)。我目前在做以下幾件事: 在我,以阻止網頁變化按捏變焦放大時,這樣做的viewpager:onSingleTapConfirmed()在onDoubleTap()之後引發

// view in the fragment is a reference to MyZoomableImageView 
viewPager.setOnTouchListener(new OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
       currentFragment.view.dispatchTouchEvent(event); 
      if (currentFragment.view.downloaded && (!currentFragment.view.whole || event.getPointerCount() > 1)) { 
       return true; 
      } else { 
       return false; 
      } 

     } 
    }); 

在我customImageView我添加姿態探測器與這個監聽器:

public class GestureListener extends GestureDetector.SimpleOnGestureListener { 

    @Override 
    public boolean onDoubleTap(MotionEvent e) { 
        Log.d(TAG, "DOUBLE"); 
     zoom(); 
     return true; 
    } 


    @Override 
    public boolean onSingleTapConfirmed(MotionEvent e) { 
       Log.d(TAG, "SINGLE"); 
      Activity a = ((Activity) context); 
      ActionBar action = a.getActionBar(); 
      if (action.isShowing()) { 
       action.hide(); 
      } else { 
       action.show(); 
      } 
     } 
     return true; 
    }; 

任何人都可以發現我在做什麼錯,爲什麼雙擊後會記錄SINGE和DOUBLE按摩。

PS.I確實解決了這個問題,使用事件監聽器之間的時間差異調用類似if(!((System.currentTimeMillis() - start)< 500))但是這只是感覺錯誤,我猜這裏有一個正確的方法來做到這一點。

+0

(我知道這是一個古老的問題。)這是因爲發生的事情可能如何/在那裏你調用[GestureDetector#的onTouchEvent(MotionEvent)](HTTP://開發商.android.com /參考/機器人/視圖/ GestureDetector.html#的onTouchEvent(android.view.MotionEvent));如果,例如它會接收到相同的觸摸事件兩次,您將得到您描述的問題。你可以在你使用GestureListener的地方發佈你的代碼部分嗎? – justasm

回答

2

我可能是錯的,這需要確認。然而,OnSingleTapConfirmed()只有在android發現單擊出現時纔會消耗,(這通常需要一段時間)。我會認爲使用OnSingleTapUp()會更好。

http://developer.android.com/reference/android/view/GestureDetector.SimpleOnGestureListener.html

公共布爾onSingleTapConfirmed(MotionEvent E)

當單抽頭髮生通知。

與onSingleTapUp(MotionEvent)不同,只有在 檢測器確信用戶的第一次敲擊後沒有跟着第二次敲擊導致雙擊手勢後纔會調用此選項。

+0

嗯,我確實使用過onSingleTapUp,但發現它在執行雙擊時讀取兩次,並且讀取「與onSingleTapUp(MotionEvent)不同,只有在檢測器確信用戶的第一次敲擊未被遵循後纔會調用它通過第二次輕敲導致雙擊手勢。「 – PSIXO

+0

所以我認爲onSingleTapUp的目的正是我所需要的,因爲如果檢測到雙擊,就不應該調用它。 – PSIXO

+0

啊我明白了。還有一件事要嘗試,OnDoubleTapEvent()。不知道這是否會起作用,但似乎應該更快消耗。 –

相關問題