本篇是对上一篇<界面3D立体旋转效果的实现>的拓展,对于PagerTransformer的相关知识,请参考上一篇分享文章.
基于之前的结论:
- 当向左滑动时, position会返回每个页面的区间变化值,如果设置预加载值为1(默认为1),就会返回3个区间变化值。分别是前一个界面左边边界的变化值[-2,-1] ; 当前界面左边边界的变化值[-1,0] ; 后一个界面左边边界的变化值[0,1].
对应position就应该是: 左边:p1(-1 到 -2 ); 当前:p2(0 到 -1 ); 右边:p3(1 到 0 ); - 当向右滑动时, position会返回每个页面的区间变化值,如果设置预加载值为1(默认为1),就会返回3个区间变化值。分别是前一个界面右边边界的变化值[-1,0] ; 当前界面右边边界的变化值[0,1] ; 后一个界面右边边界的变化值[1,2].
对应position就应该是: 左边:p1(-1 到 0 ); 当前:p2(0 到 1 ); 右边:p3(1 到 2 );
有上面两点可以观察到,[-1,0]和[0,1]这两个变化区间,无论是向左还是向右滑都会出现,而且变化方向正好相反,也是用户可见的变化区间.所有我们只用关注这两个区间.
下面就看看一些实现的效果图:
点击标题查看源码
3D水平旋转
3D水平旋转(内部视角)
渐变
缩放
层叠
相关:
- 要实现同时看见两侧的view,如下图所示,需要给viewpager的父控件以及自己设置
android:clipChildren="false"
.然后设置margin就可以了.可以与上面的缩放效果配合使用,达到画廊效果.如下图
- 如果使用上面的效果,两侧的view没有缩小,或者只有侧的缩小显示,另一侧没有缩小,如下图,右侧的view没有缩小显示,此时需要设置
viewpager.setOffscreenPageLimit(2);
设定预加载页数
点击上面标题查看具体代码
点击查看源码以及示例demo
如果需要使用,将transformerLib包下的相关源码放入自己的项目中(不需要的效果可以删除),使用viewpager.setPageTransformer(true, MyTransformer.getMyTransformer(TransType.H3D));
设置即可.