2015-04-01 18 views
1

默認情況下,當您滑過ViewPager時,可以滑過儘可能多的頁面,直至手指觸及屏幕末尾。那麼,是否有可能強制ViewPager只允許一次頁面更改,而不管用戶滑動多少?如何鎖定ViewPager以僅允許一次單擊頁面划動

這就是我說的,直到你的手指到達屏幕的結束刷卡超過尋呼機: what I have

這就是我所說的鎖定ViewPager只允許單頁輕掃在一個時間是指: this is what I want to achieve

謝謝。

+0

我想我沒有正確理解你的問題,因爲一個滑動手勢只能移動到下一個或前一個'fragment'(或頁面,如果你想要的話)。你能重新表達嗎? – moictab 2015-04-01 10:25:05

+0

您可能需要編寫大量代碼才能做到這一點,但我會更關心用戶體驗。如果用戶滑動並且有時頁面滾動,有時候不會。你可能會考慮一個不同的視圖,在這個視圖中你有一個左鍵和右鍵,用戶使用按鈕移動頁面,而不是滾動。 – 2015-04-01 10:45:54

+0

但是,如果您絕對需要這樣做,最簡單的方法可能是修改ViewPager的適配器,以便它只顯示三個頁面:顯示的頁面,左側的頁面和右側的頁面。然後,當用戶選擇下一頁時,通過將下一頁作爲當前頁來更新適配器,並且再次返回三頁集,僅移動到一頁上。 – 2015-04-01 10:48:41

回答

1

最後,我最終在適配器中完成了它。我所做的是在getCount方法中返回2,在選擇之後重新排列項目,並特別處理使用當前位置(0或1)訪問數據集中的項目時的情況。

1

好的,我想答案是:擴展ViewPager並覆蓋onTouchEvent(MotionEvent ev)

private Rect viewRect = new Rect(); 

@Override 
public boolean onTouchEvent(MotionEvent event) { 

    getHitRect(viewRect); 

    if (viewRect.contains(
     Math.round(view.getX() + event.getX()), 
     Math.round(view.getY() + event.getY()))) { 

     // touch is inside, do normal behavior 
     return super.onTouchEvent(event); 
    } else { 
     // touch is outside, consume the event & do nothing 
     return true; 
    } 
} 

不幸的是,現在沒有時間真正地測試它,我稍後會進行更新。

+0

這實際上並不像預期的那樣工作。如果您從中心開始滑動,則一旦將手指移動到尋呼機外,移動就會停止。 – xip 2015-04-01 18:23:30

+0

我在想我可以用onTouchEvent做些什麼,只是不知道該怎麼做。這個答案給了我一個主意。一旦我回家,我會看看它是否會起作用。 – xip 2015-04-01 18:25:34

相關問題