2

私はAHBottomNavigation(https://github.com/aurelhubert/ahbottomnavigation)を使用しようとしています。私は自分のためにそのデモアプリケーションに従っています。ViewPagerでsetCurrentItem(position、false)がフェードインの遷移を使用していますか?

デモアプリケーションでは、ViewPagerとFragmentPagerAdapterを使用してフラグメント間を変更し、すべてが完全に機能しています。

私の問題は、私はフェードイン断片間のフェードアウトトランジションを追加したい、私はこの変更しようとした、次のとおりです。

viewPager.setCurrentItem(position); 

ため

viewPager.setCurrentItem(position, false); 

をそして、私が追加しました私のMainActivityでこの:

viewPager.setPageTransformer(false, new FadePageTransformer()); 

... 

public class FadePageTransformer implements ViewPager.PageTransformer { 
    public void transformPage(View view, float position) { 
     view.setTranslationX(view.getWidth() * -position); 

     if(position <= -1.0F || position >= 1.0F) { 
      view.setAlpha(0.0F); 
     } else if(position == 0.0F) { 
      view.setAlpha(1.0F); 
     } else { 
      // position is between -1.0F & 0.0F OR 0.0F & 1.0F 
      view.setAlpha(1.0F - Math.abs(position)); 
     } 
    } 
} 

それは実際に動作しますが、私は最後の1に最初のフラグメントから行きたい場合は、それスクロールビューのように、それらの間のすべてのフラグメントを表示します。

それは、これは方法私がフェードイン、フェードアウトの移行のために使用することができると思うが、私はそれを実装する方法の見当がつかないフラグメントクラス(DemoFragment)における方法ですしています

/** 
* Called when a fragment will be displayed 
*/ 
public void willBeDisplayed() { 
    // Do what you want here, for example animate the content 
} 

申し訳ありませんが、私はアンドロイドで新しく、まだ学んでいます。

UPDATE:私は、アクティブと非アクティブのビュー間(https://www.google.com/design/spec/components/bottom-navigation.html#bottom-navigation-behavior

トランジションクロスを使用した材料設計の例のように、フラグメント間のクロスフェードアニメーションを追加したい

フェード アニメーション。

答えて

1

ビューページがページ間を移動するため、アニメーションページの変更はマテリアルデザインガイドラインに従って使用しないでください。代わりに、あなたは偽としてブール・パラメータでsetCurrentItem(int, boolean)を使用します(これはその間の要素による移行を削除)し、onTabSelected内でアニメーションを実行する必要があります。

private Animation fadeOut; 
private Animation fadeIn; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    ... 
    fadeOut = AnimationUtils.loadAnimation(this, android.R.anim.fade_out); 
    fadeOut.setDuration(150); 
    fadeIn = AnimationUtils.loadAnimation(this, android.R.anim.fade_in); 
    fadeIn.setDuration(150); 
    ... 

    bottomNavigation.setOnTabSelectedListener(new AHBottomNavigation.OnTabSelectedListener() { 
      @Override 
      public boolean onTabSelected(int position, boolean wasSelected) { 
       if(!wasSelected) { 
        Fragment oldFrag = getCurrentFragment(); 
        if(oldFrag.getView() != null) { 
         oldFrag.getView().startAnimation(fadeOut); 
        } 

        mViewPager.setCurrentItem(position, false); 

        // The following line might not be necessary 
        getSupportFragmentManager().executePendingTransactions(); 

        Fragment newFrag = getCurrentFragment(); 
        if(newFrag.getView() != null) { 
         newFrag.getView().startAnimation(fadeIn); 
        } 
       } else { 
        getCurrentFragment().onReopen(); 
       } 

       return true; 
      } 
     }); 
} 
関連する問題