2012-06-25 49 views
1

我對這個問題已經閱讀了一些不同的回答,所以我不知道哪一個是對的,於是我決定再次提問。請儘量不要在此答案中引用任何其他鏈接。如果你想這樣做,我會期待一些額外的解釋。Android setOnTouchListener

我的問題是: 我有一個ImageView一個ViewPager裏面,我ImageView有一些手勢檢測(縮放和平移),我使用的是默認ViewPager,這已經默認刷卡檢測。 onTouch事件鏈如何工作?在我的層次結構中的最低視圖將始終得到onTouch,如果方法返回false將父處理它?也許是相反的?

我問,因爲我有一個具有手勢ImageView左,右,當我在圖像的邊緣得到,我一定要分派事件到父(一ViewPager)來處理分頁事件。如何做到這一點的任何進一步提示,這將非常感激。

回答

2

所以,我已經在ViewPager的子視圖中以更好的方式處理了多個接觸,然後onInterceptTouchEvent,我說,因爲在我的情況下,爲了知道是否必須滾動兒童視圖而不是尋呼機,我需要開始點和結束點之間的距離,我不想保存那些變量並在之後計算增量。

無論如何,進入ViewPager的源代碼後,我發現有一個非常好的方法,我應該實現這個原因。 這是我實現:

@Override 
protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) { 
    if (v instanceof ImageViewTouch) { 
     return ((ImageViewTouch) v).canScroll(dx); 
    } else { 
     return super.canScroll(v, checkV, dx, x, y); 
    } 
} 

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.1_r1/android/support/v4/view/ViewPager.java#ViewPager.canScroll%28android.view.View%2Cboolean%2Cint%2Cint%2Cint%29

+0

你可以請發佈一個ImageViewTouch類的canScroll()方法嗎?我假設你正在使用這個ImageViewTouch(https://github.com/sephiroth74/ImageViewZoom) – atermenji

1

它的作用相反,ViewPager首先吃觸摸事件,然後ImageView會得到它。

我會在自定義View Pager上使用onInterceptTouchEvent(MotionEvent ev)。在MotionEvent上,您將需要分析ev.getPointerCount()有多少接觸點。

如果你有ev.getPointerCount()== 2,你可能會想要在ImageView中捏和縮放。

如果您有ev.getPointerCount()== 1,那麼您可能想要瀏覽View Pager的頁面或在ImageView中執行平移。爲了區分這兩者,你需要弄清楚你是用一個手指執行一個滑動手勢還是用一個簡單的MotionEvent.MOVE來執行一個平移。輕掃手勢要求用戶超過預定義的速度。手勢檢測器應該爲您處理這個問題。

+0

嘿嘿,謝謝你的提示,但實際上這就是我要怎樣做。我不想亂搞Down指針來保存過去的值。以及我的ViewPager中有一個ImageView的實例。所以我找到了另一種方法來做到這一點。會發布我的答案,所以每個人都可以看到它。謝謝反正 –

相關問題