我想在滑动我的碎片时模拟视差效果,我了解了 beginFakeDrag 和 fakeDragBy,但老实说,我不知道它是否是解决我的问题的最佳方法。
有人用 ViewPager 做过类似的事情吗?或者对我该如何解决这个问题有提示?
谢谢
我想在滑动我的碎片时模拟视差效果,我了解了 beginFakeDrag 和 fakeDragBy,但老实说,我不知道它是否是解决我的问题的最佳方法。
有人用 ViewPager 做过类似的事情吗?或者对我该如何解决这个问题有提示?
谢谢
如果不使用自定义库,一种简单的方法是实现ViewPager.PageTransformer
。
我创建了我的布局来使用相同的id
作为它们的背景元素。对于我的示例,所有背景图像都将使用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());
我知道这有点老了,但是看一下这个https://github.com/xgc1986/ParallaxPagerLibrary
它不会覆盖onDraw方法,并且该效果不仅适用于图像,还适用于各种类型的视图。
mPager.setPageTransformer(false, new ParallaxTransformer(R.id.parallaxContent));
R.id.paraallaxContent 是你想要添加该效果的视图的ID。
与其他解决方案不同,它不需要任何具体的结构来工作,且与布局无关。
演示:youtube
这个库在x和y方向上是完全可定制的,包括透明度效果:
https://github.com/prolificinteractive/ParallaxPager
安装(截至v0.7版本,查看README获取更新):
使用Gradle将其添加为Maven Central依赖项
在布局XML中使用ParallaxContainer
代替ViewPager
为每个页面创建一个布局XML文件(可以单独设置进出页面的每个对象的x / y / alpha属性)
在您的Activity的onCreate
中添加一些复制/粘贴行
xmlns:app
行?每个布局中视图的x_in
等值是什么?感谢您的评论,希望我们能解决这个问题。 - matt---也许这个库很有用:https://github.com/matrixxun/ProductTour?
它使用"ViewPager.PageTransformer"来使内部的元素以不同的方式移动。