2011-11-30 16 views
2

我想創建一個包含可縮放視圖的ViewPager,例如網頁。如何在ViewPager中創建可縮放頁面?

我的問題是:

當用戶放大(縮放)所顯示的來看,ViewPager不應一扔對diplayed視圖的左邊或右邊的頁面,取而代之的是,平移方法由我定義應就這一觀點開展工作。我知道在視圖分頁器中有一個requestDisallowOnTouchIntercept方法,但似乎不能在任何地方工作,而不是onTouch方法。

請提供一些有效的解決方案。

請勿張貼this link爲你的答案

回答

0

我不能給你不知道你是如何實現的縮放視圖,但假設你有跟蹤您的視圖是否被放大的能力,一個確切的答案您可以在觸摸事件到達ViewPager之前選擇性地取消觸摸事件。它會是這個樣子:

boolean isZoomedIn; 

viewPager.setOnTouchListener(new OnTouchListener() 
{ 
    @Override 
    public boolean onTouch(View v, MotionEvent event) 
    { 
     if (isZoomedIn) 
     { 
      // The view is zoomed in, so we want to handle this event 
      // before it gets to the ViewPager so the view can pan 
      // around freely. 
      return true; 
     } 
     else 
     { 
      // The view is zoomed out; let the ViewPager react normally. 
      return false; 
     } 
    } 
}); 

你可以從那裏票友,跟蹤,無論您的放大視圖是在極端的左邊或右邊,然後讓ViewPager的觸摸事件正常,如果完成指針的運動分別向左或向右。然後,您可以允許用戶滑動到下一頁,而無需再次縮小。您可以通過MotionEvent對象的各種屬性瞭解觸摸如何移動的所有信息。

您可能還想檢查event.getPointerCount(),如果它大於一個,則返回True,以便ViewPager在您執行縮放時不會四處移動。

它跟蹤和計算所有變量有點複雜,但它是相對簡單的數學運算,結果歸結爲您希望ViewPager忽略的事件返回True,您希望ViewPager忽略的事件False。

+0

感謝您的幫助,但我的問題是通過viewPager.disallowOnTouchIntercept(true)解決的,它阻止viewPager在我不想要的情況下跟蹤觸摸事件。 –