viewpager过渡动画--PagerTransformer实现

本篇是对上一篇<界面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.gif

3D水平旋转(内部视角)

3din.gif

渐变

fadein.gif

缩放

scale.gif

层叠

overlap.gif

相关:

  • 要实现同时看见两侧的view,如下图所示,需要给viewpager的父控件以及自己设置android:clipChildren="false".然后设置margin就可以了.可以与上面的缩放效果配合使用,达到画廊效果.如下图
    image.png
  • 如果使用上面的效果,两侧的view没有缩小,或者只有侧的缩小显示,另一侧没有缩小,如下图,右侧的view没有缩小显示,此时需要设置viewpager.setOffscreenPageLimit(2);设定预加载页数
    image.png

    点击上面标题查看具体代码
    点击查看源码以及示例demo
    如果需要使用,将transformerLib包下的相关源码放入自己的项目中(不需要的效果可以删除),使用viewpager.setPageTransformer(true, MyTransformer.getMyTransformer(TransType.H3D));设置即可.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 CALayer IOS SDK详解之CALayer(一) http://doc.okbase.net/Hell...
    Kevin_Junbaozi阅读 10,586评论 3 23
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,707评论 25 709
  • 嘴不点而含丹,眉不画而横翠。仙如描似削身材,怯雨羞云情意。游走云端,举措多娇媚。 手捧荷花如若仙子般的美丽女子,一...
    大喵的下午茶阅读 1,787评论 0 1
  • 林小刀159阅读 1,196评论 0 0
  • 我站在高高的山岗上,看着远处的斑马群在大草原上悠闲自在的啃着青草,长颈鹿努力的伸着脖子吃树梢的嫩叶,角马...
    五十米深蓝l阅读 2,600评论 1 1