Android ViewPager中的视差效果

时间:2012-09-14 11:57:22

标签: android android-viewpager parallax

我试图在滑过片段时模仿视差效果,我读过有关beginFakeDrag和fakeDragBy但是说实话,即使这是解决我问题的最佳方法,我也不知道。

任何人都使用ViewPager做了类似的事情,或者提示我应该如何解决这个问题?

谢谢

8 个答案:

答案 0 :(得分:11)

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

我实施了自己的解决方案,基本上扩展了ViewPager并覆盖了onDraw

您可以使用简单示例here

找到所有代码

答案 1 :(得分:11)

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

我创建了我的布局,使用相同的id作为背景元素。对于我的示例,所有背景图像都将使用标识background

<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());

答案 2 :(得分:6)

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

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

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

R.id.paraallaxContent是您希望产生此效果的视图的ID

除非其他解决方案,不需要任何具体的结构工作,也是布局独立的

演示:youtube

答案 3 :(得分:2)

也许这个图书馆可以帮到你:

https://github.com/garrapeta/ParallaxViewPager

答案 4 :(得分:2)

你可以看看这个:

https://github.com/luxsypher/ParallaxViewPager

您可以对视图的任何元素应用视差效果,并为它们提供所有不同的速度

答案 5 :(得分:2)

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

答案 6 :(得分:2)

此库可在x和y方向完全自定义,并包含alpha效果:

https://github.com/prolificinteractive/ParallaxPager

安装(自v0.7起,检查README以获取更新):

  1. 使用Gradle

  2. 添加为Maven Central依赖项
  3. 在布局XML中使用ParallaxContainer而不是ViewPager

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

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

  6. parallax planet animation

答案 7 :(得分:1)

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

它使用&#34; ViewPager.PageTransformer&#34;使内部的移动方式不同。