14

我试图在我的片段中滑动时模拟视差效果,我已经阅读过 beginFakeDrag 和 fakeDragBy 但老实说,我不知道它是否是解决我的问题的最佳方法。

任何人都对 ViewPager 做过类似的事情,或者对我应该如何处理这个有提示?

谢谢

4

8 回答 8

15

不使用自定义库的一种简单方法是实现ViewPager.PageTransformer

我创建了布局以将其id用于背景元素。对于我的示例,所有背景图像都将使用 idbackground

<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/background"
    android:src="@drawable/img12"
    android:scaleType="fitXY"/>

然后,当我开始实施时,ViewPager.PageTransformer我可以像这样引用该图像:

public class Transformer implements ViewPager.PageTransformer{
    @Override
    public void transformPage(View page, float position) {
        if(position >= -1 && position <= 1){
            page.findViewById(R.id.background).setTranslationX(-position * page.getWidth() / 2);
        } else {
            page.setAlpha(1);
        }
    }
}

最后,我将我的分配ViewPager.PageTransformer给我的ViewPager喜欢。

ViewPager pager = (ViewPager) findViewById(R.id.pager);
pager.setPageTransformer(false, new Transformer());
于 2016-09-16T19:19:14.850 回答
12

这个问题有点老了,但是当我试图做到这一点时,我发现了它......

我实现了自己的解决方案,基本上是扩展ViewPager和覆盖onDraw.

你可以在这里找到一个简单示例的所有代码

于 2013-02-05T01:06:06.280 回答
6

我知道它有点旧,但看看https://github.com/xgc1986/ParallaxPagerLibrary

它不会覆盖 onDraw 方法,并且效果不仅适用于图像,它适用于各种视图

mPager.setPageTransformer(false, new ParallaxTransformer(R.id.parallaxContent));

R.id.paraallaxContent 是你想要这个效果的View的id

除非其他解决方案,不需要任何具体结构即可工作,并且与布局无关

演示:YouTube

于 2014-04-25T20:33:10.233 回答
2

也许这个库可以帮助你:

https://github.com/garrapeta/ParallaxViewPager

于 2014-03-22T19:33:14.823 回答
2

你可以看看这个:

https://github.com/luxsypher/ParallaxViewPager

您可以在视图的任何元素上应用视差效果并赋予它们不同的速度

于 2014-04-12T09:03:48.040 回答
2

这是我编写的 ViewPager 子类,非常易于使用。您不需要对它做任何不同的事情,只需包含依赖项并将其用作标准 ViewPager。在GitHub上可用。

于 2014-05-09T15:11:56.937 回答
2

这个库在 x 和 y 方向上是完全可定制的,并且包括 alpha 效果:

https://github.com/prolificinteractive/ParallaxPager

安装(从 v0.7 开始,检查 README 以获取更新):

  1. 使用 Gradle 添加为 Maven Central 依赖项

  2. 使用ParallaxContainer布局 XML 代替ViewPager

  3. 为每个页面创建一个布局 XML 文件(可以为每个移入/移出页面的对象单独设置 x/y/alpha 属性)

  4. 有一些复制/粘贴行要添加到onCreate您的活动中

视差星球动画

于 2014-05-12T23:53:22.187 回答
1

也许这个库可能有用: https ://github.com/matrixxun/ProductTour ?

它使用“ViewPager.PageTransformer”使事物在内部以不同方式移动。

于 2015-06-30T15:02:17.507 回答