0

我有什麼ViewPager當前片段能見度

我有5個片段一ViewPager。我想爲片段內的某些TextView設置動畫,只要它們對用戶可見即可。

我無法使用onResume(),因爲已經創建了左側和右側的片段。我無法使用setUserVisibilityHint(),因爲它在onCreateView()之前調用,所以視圖還沒有準備好。

那麼只要某個特定片段變得對用戶可見,應該如何動畫視圖?

+0

你試過ViewPager.setOnPageChangeListener()嗎?在調用onPageSelected時激活視圖 – jobcrazy

回答

1

我不確定,但是如果您在onCreateView之前調用setUserVisibilityHint調用,那麼請在這裏檢查null(在視圖字段中引用),如果它不爲空 - 則爲它設置動畫效果。還總是在onCreateView中動畫。

0

如果要在單個片段中執行此操作,則可以對片段轉換中的每個片段使用isVisible() 並創建一個偵聽器。每當片段變得可見時,偵聽器將被調用,並且每個片段將實現該偵聽器,並在重寫的方法中執行您的預期任務。

+0

我想在單個片段中執行此操作,而不是在活動中執行此操作。 –

+0

@Aritra:我編輯了我的答案。 – theJango

+0

你可以請示例代碼幫忙嗎? –

0

(1)我不能使用的onResume()作爲已創建所述片段的左側和右側。 (2)我不能使用setUserVisibilityHint(),因爲它在onCreateView()之前調用,所以視圖還沒有準備好。

那麼只要某個特定片段變得對用戶可見,應該如何動畫視圖?

你說得對(1)和(2)。但是,setUserVisibilityHint()被稱爲再次值後顯示前面的碎片。但在第一次運行時,要顯示的片段在onCreateView()之前調用setUserVisibilityHint()

SOL:您應該使用上述setUserVisibilityHint()以及onResume()的行爲來爲視圖設置動畫,只要特定片段對用戶可見即可。

  • 方案1:第一次運行:顯示片段的setUserVisibilityHint(boolean isVisibleToUser)被稱爲與 真正的參數值的方式。但是隨着片段的狀態不再恢復,我們推遲並讓onResume()處理動畫。
  • 方案2:對於那些已經在恢復狀態的其他片段,setUserVisibilityHint(boolean isVisibleToUser)將調用與 真PARAM它,他們一上來就顯示。在這裏你檢查 片段動畫或不動畫和動畫。

CODE

a)宣佈兩次全球布爾字段:isAnimatedisOnDisplay

A.1)設置isAnimated布爾爲True;

二)覆蓋setUserVisibilityHint(boolean isVisibleToUser)

在這裏你設置isOnDisplay布爾值isVisibleToUser和檢查是片段沒有動畫,是國家復會,是可見的用戶。

{ if(!isAnimated && isResumed() && isVisibleToUser) // DO Animation } 

C)覆蓋onResume()

檢查的片段沒有動畫,是可見的用戶。

{ if(!isAnimated && isVisibleToUser) // DO Animation } 
1

我知道這個答案可能有點晚,但我希望它可以幫助其他人在類似的情況。

您可以使用FragmentViewPager庫(我是作者),它處理您面臨的問題。其特點是:

  • 允許得到通知其Fragment頁面時,他們實際上是 顯示/隱藏到
  • 支持FragmentViewPagers(嵌套)多層次
  • 提供了一些方法來控制其尋呼
  • 用戶

基本用法是:

  1. 以編程方式或通過XML將FragmentViewPager附加到活動 或片段,如同使用本地ViewPager
  2. 設置FragmentViewPager的適配器。你的適配器要繼承 com.sbrukhanda.fragmentviewpager.adapters.FragmentPagerAdaptercom.sbrukhanda.fragmentviewpager.adapters.FragmentStatePagerAdapter
  3. 覆蓋onResumeFragments()主辦的活動,並呼籲 FragmentViewPager.notifyPagerVisible()

    private FragmentViewPager mFragmentsPager; 
    
    @Override 
    public void onResumeFragments() { 
        super.onResumeFragments(); 
        mFragmentsPager.notifyPagerVisible(); 
        ... 
    } 
    

    onResume()託管片段和呼叫 FragmentViewPager.notifyPagerVisible()

    private FragmentViewPager mFragmentsPager; 
    
    @Override 
    public void onResume() { 
        super.onResume(); 
        mFragmentsPager.notifyPagerVisible(); 
        ... 
    } 
    
  4. 覆蓋主辦活動或片段的,並呼籲 FragmentViewPager.notifyPagerInvisible()

    private FragmentViewPager mFragmentsPager; 
    
    @Override 
    public void onPause() { 
        super.onPause(); 
        mFragmentsPager.notifyPagerInvisible(); 
        ... 
    } 
    
  5. 實現在您 希望收到的回調,他們的可見性狀態
  6. 你準備好了所有的片段頁面FragmentVisibilityListener

如果您希望看到更完整的示例代碼,請檢查項目的sample project