我最近下载了Google Sheets应用程序,对第一个屏幕介绍应用程序的详细信息非常感兴趣,因此我尝试重新创建它。
经过一些调研,我决定使用ViewPager
并进行了实现。
但是,结果并不如我所预期。
在Sheets应用程序中,颜色转换是逐渐而微不足道的,但在我的情况下,转换是明显的(使用的颜色方案与Sheets应用程序相同)。
Sheets应用程序中应用了何种类型的动画,我该如何复制它?
我最近下载了Google Sheets应用程序,对第一个屏幕介绍应用程序的详细信息非常感兴趣,因此我尝试重新创建它。
经过一些调研,我决定使用ViewPager
并进行了实现。
但是,结果并不如我所预期。
在Sheets应用程序中,颜色转换是逐渐而微不足道的,但在我的情况下,转换是明显的(使用的颜色方案与Sheets应用程序相同)。
Sheets应用程序中应用了何种类型的动画,我该如何复制它?
ViewPager
中的 Fragments
中移除背景(我假设您在 ViewPager
的 Adapter
中使用 Fragments
... 如果不是,请告诉我)。而“去除背景”的意思是例如将其设置为 "@android:color/transparent"
。ViewPager
本身中删除背景(例如通过将其颜色设置为 transparent
)。ViewPager
下方(z-wise)放置一个作为变化背景的 View
。例如像这样(没有参数):<FrameLayout>
<View android:id="@+id/animated_color_view"/>
<android.support.v4.view.ViewPager/>
</FrameLayout>
animated_color_view
的背景颜色。您可以使用链接到REG1的评论中所包含的线程中的方法之一,例如像这样(该方法取自此帖子):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();
}
OnPageChangeListener
监听器,在每次选中页面时调用这个动画方法。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
中页面的数量。