2017-03-18 116 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()); 

当两个幻灯片过渡动画具有相同的内插器,他们将在完全相同的速度移动,顺利同步。