碎片之间的渐变过渡

时间:2016-06-20 17:22:14

标签: android user-interface android-fragments

我最近下载了Google表格应用,我对第一个解释应用详细信息的屏幕感兴趣,所以我尝试重新创建它。

经过一些研究后我决定ViewPager并实施了它。

result并非我的预期。

在工作表应用程序中,颜色变化是渐进的,几乎不会引人注意,但在我的情况下,过渡是明确的(使用的颜色方案与工作表应用程序中的相同)。

在工作表应用程序中应用的动画类型是什么?如何复制它?

1 个答案:

答案 0 :(得分:2)

最简单的方法是:

  1. Fragments中移除ViewPager的背景(我假设您在Fragments ViewPager's内使用Adapter ...如果没有,请告诉我们) 。通过“删除背景”,我的意思是,例如将其设置为"@android:color/transparent"
  2. ViewPager本身移除背景(例如,将其颜色设置为transparent)。
  3. View放在ViewPager下面(z-wise)作为更改背景。例如像这样(没有参数):
  4. <FrameLayout>
        <View android:id="@+id/animated_color_view"/>
        <android.support.v4.view.ViewPager/>
    </FrameLayout>
    
    1. 创建一种动画animated_color_view背景颜色的方法。您可以使用REG1 in the comment (edit: the comment has been deleted, but this link points to the same thread)链接的线程中包含的方式之一。例如像这样(方法取自this post):
    2. int[] pageColors = new int[]{Color.RED, Color.GREEN};
      int currentColor = pageColors[0];
      ValueAnimator colorAnimation;
      
      public void animateToColor(int colorTo) {
          if (colorAnimation != null) {
              colorAnimation.cancel();
          }
          colorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), currentColor, colorTo);
          colorAnimation.setDuration(250); // milliseconds
          colorAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
      
              @Override
              public void onAnimationUpdate(ValueAnimator animator) {
                  currentColor = (int) animator.getAnimatedValue();
                  animatedColorView.setBackgroundColor(currentColor);
              }
      
          });
          colorAnimation.start();
      }
      
      1. 添加OnPageChangeListener,每次选择页面时都会调用此动画方法。
      2. viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }
        
            @Override
            public void onPageSelected(int position) {
                animateToColor(pageColors[position]);
            }
        
            @Override
            public void onPageScrollStateChanged(int state) {
            }
        });
        

        还有一点注意事项:请记住,pageColors数组的大小必须等于ViewPager中的页数。