【问题标题】:Can I set up a non-linear (old style) animation with ViewPager2?我可以使用 ViewPager2 设置非线性(旧式)动画吗?
【发布时间】:2019-10-17 10:07:23
【问题描述】:

我最近用ViewPager2 替换了我的ViewPager,但是,滑动页面时的动画看起来像是机器人和非线性的,不像旧的动画更流畅。有什么办法可以找回旧的吗?

【问题讨论】:

  • ViewPager2 使用 PagerSnapHelper 动画滑动,它是私有字段,你不能轻易覆盖它,只能通过反射。

标签: android android-recyclerview android-viewpager android-animation android-viewpager2


【解决方案1】:

好吧,Developer guide 肯定会向您展示如何在您的代码中实现 viewpager,但为了让您的动画效果更流畅,请尝试实现以下代码。

public class ParallaxPageTransformer implements ViewPager.PageTransformer {

        public void transformPage(View view, float position) {

            int pageWidth = view.getWidth();


             if (position < -1) { // [-Infinity,-1)
                    // This page is way off-screen to the left.
                    view.setAlpha(1);

                } else if (position <= 1) { // [-1,1]

                    dummyImageView.setTranslationX(-position * (pageWidth / 2)); //Half the normal speed

                } else { // (1,+Infinity]
                    // This page is way off-screen to the right.
                    view.setAlpha(1);
                }


        }
    }

这将为您提供这样的动画:

您还可以通过以下链接获得更多帮助:

http://andraskindler.com/blog/2013/create-viewpager-transitions-a-pagertransformer-example/

http://developer.android.com/training/animation/screen-slide.html#pagetransformer

【讨论】:

    【解决方案2】:

    在 ViewPager2 中自定义动画的规范方法似乎是通过PageTransformer。不包含直接替换,但您可以创建自己的过渡:

    class MyPageTransformer : ViewPager2.PageTransformer {
      override fun transformPage(view: View, position: Float) {
        // position is the offset from center, negative being left
        // make changes to view based on pages position
        // e.g. view.alpha = min(0f, 1f - abs(position))
      }
    }
    
    ...
    
    viewPager.setPageTransformer(MyPageTransformer())
    

    查看 Developer Guide 中的示例以了解 ViewPager2 转换。

    【讨论】:

    • 我以前见过这个,它并没有解决我的问题
    • 对不起!根据 Bracadabra 的回应,除了使用反射来覆盖动画行为或切换离开 ViewPager2 之外,可能没有其他选择。您在使用 Transformer 时遇到了哪些特殊问题?您无法访问要设置动画的属性吗?还是您可以指定它们但动画无法正确呈现?
    猜你喜欢
    • 2012-03-08
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多