0
多個可見頁面

我的問題是相當複雜的,我很難找到一個解決方案,實現以下目標:的Android ViewPager - 動態寬度和

我需要有一種傳說(步進)佈局,其中一個孩子是由左欄,然後是一個圓圈,然後是一個右欄。嚴厲地講一些像「-o-」的東西。所以一系列的孩子看起來像這樣:「-o-o-o-o-o」。當圖例集中在一個孩子意思是當前孩子是這個孩子時,這個孩子有一個更大的圓圈和更長的酒吧:「--O--」。

最終的渲染看起來像這樣:「-o-o -O-o-o-」。

每個孩子(「-o-」)對應於數據庫中的特定項目。當孩子獲得焦點(「--O--」)時,相關項目顯示在下面。當用戶從右向左滑動時,顯示下一個項目,而從左向右滑動將顯示前一個項目。

滑動時,顯示哪個孩子將顯示其相應的項目,說孩子會動畫顯示它有焦點。我用一個Animator到:

  1. 增加棒寬度,這是 獲得焦點
  2. 降低先前這些值關注孩子的孩子的圓圈大小。

顯示圖例需要看看之前和接下來會發生什麼。

我相信使用ViewPager會幫我實現以下目標:

  1. 它有一個「錨定效應」,意思是刷卡將孩子轉移到孩子,圍繞圓:之間的圈子可以這麼說,酒吧是主播。
  2. 我可以通過重寫我的自定義adapter

getPageWidth()方法的其他解決方案,我腦子裏想的是HorizontalScrollView在屏幕上顯示多個頁面。 如果我要使用它,根據滑動屬性(強度,速度),圖例將在不固定圓的情況下不確定地滾動。

但是使用ViewPager存在一個很大的問題:每個頁面都有相同的寬度。然而,圖例的錨定孩子需要更大(所以需要更多的寬度)。

那麼如何動態改變寬度呢?

除非我可以自定義HorizontalScrollView通過在滑動中攔截來添加錨效應?

回答

0

如果您使用ViewPager,我認爲最好的方法是使用OnPageChangeListener。當用戶向左/向右滑動時,您將得到回調,以便根據用戶滑動的位置調整指示器的大小。

private int mCurrentPage = 0; 

    viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 

     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
      // positionOffset goes from 0.0 to just under 1.0 for the leftmost page 

      float otherOffset = 1.0 - positionOffset; 

      if (position == mCurrentPage) { // user is incrementing page, i.e. swiping left 
       // size of current page indicator based on otherOffset 
       // size of next page indicator based on positionOffset 

      } else { // user is decrementing page, i.e. swiping right 

       // size of current page indicator based on positionOffset 
       // size of previous page indicator based on otherOffset 
      } 
     } 

     @Override 
     public void onPageSelected(int position) { 
      mCurrentPage = position; 

      // ... set final sizes: page @ position = 1.0 all others 0.0 
     } 
    }); 

下面是如何理解positionpositionOffset:當一個頁面已經解決,它的中心。假設當前頁面位置== 1(即第2頁)。

  • 第一種情況:用戶向左滑動以進入下一頁。假設用戶滑動距離的10%來到下一頁。 position將爲1(最左側顯示),而positionOffset將爲0.1(視口左側位於最左側頁面的10%)。因此,當用戶滑動時,positionOffset將從0.0變爲僅低於1.0

  • 第二種情況:用戶向右滑動到上一頁。當用戶滑動距上一頁的距離的10%時,position將爲0(最左邊顯示),而positionOffset將爲0.9(視口左邊緣位於最左邊頁面的90%處)。因此,當用戶滑動時,positionOffset將從1.0下降到0.0

至於指標本身,我沒有在那裏我用了一個LinearLayout與水平方向,增加了對每一頁子指標視圖類似尋呼機的指標。我使用pagerAdapter.getCount()來獲取要添加的視圖數量。

您的指標與動畫相比更加複雜,但如果要這樣做,我會使用一個普通的ViewScaleDrawable背景用於可能更改大小的圖形。

+0

你在github https://github.com/LyndonChin/AndroidRubberIndicator上試過這個示例代碼嗎? –