2017-03-18 80 views
0

當用戶前進到下一個片段時,我只想讓它們滑動,就像使用ViewPager一樣。所以我嘗試過:片段幻燈片轉換不同步

public void replaceFragmentSlide(Fragment newFragment) { 
     if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { 
      Slide slideFromRight = new Slide(); 
      slideFromRight.setSlideEdge(Gravity.END); 
      Slide slideFromLeft = new Slide(); 
      slideFromLeft.setSlideEdge(Gravity.START); 

      Fragment oldFragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container_detail); 
      if (oldFragment != null) { 
       oldFragment.setExitTransition(slideFromLeft); 
      } 

      newFragment.setEnterTransition(slideFromRight); 
      newFragment.setExitTransition(slideFromLeft); 
     } 
     FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
     fragmentTransaction.replace(R.id.fragment_container_detail, newFragment, newFragment.getClass().getName()) 
       .addToBackStack(null) 
       .commit(); 
    } 

視覺效果很奇怪。進入的片段開始快速移動,然後最後放慢速度。現存的片段開始緩慢移動,然後在最後加速。他們應該在任何特定的時刻匹配速度,他們的邊界只是在過渡發生時觸摸。

我缺少什麼?

+1

我剛開始看這方面,所以我可能會離開基地。在我看來,你需要以某種方式鏈接兩個轉換 - 也許通過[TransitionSet](https://developer.android.com/reference/android/transition/TransitionSet.html)或[TransitionManager](https:// developer .android.com /參考/機器人/過渡/ TransitionManager.html)。 – Cheticamp

+0

這個提示讓我看到了一些谷歌搜索,給了我一個正確方向的提示。 –

回答

0

就像我想的那樣,答案非常明顯,讓我變得很愚蠢。

正如我所指出的那樣,這兩個轉換加速和減速的方式不同。這是他們的插入器的結果。所以我需要做的是確保它們都具有相同的插補器。它可以是簡單:

slide.setInterpolator(new FastOutSlowInInterpolator()); 

當兩個幻燈片過渡動畫具有相同的內插器,他們將在完全相同的速度移動,順利同步。