Android两行代码搞定ViewPager的过渡动画

http://www.apkbus.com/android-251300-1-1.html

ViewPager自带了一种默认的页面滑动切换动画,但是如果产品想要更炫的滑动效果的时候怎么办呢?不要怕,我们可以使用support libraryPagerTransformer,API11 (Honeycomb) 及以上android版本都支持这个类。
用法很方便,

[Java] 纯文本查看 复制代码
?
1
2
3
4
5
6
viewpager.setPageTransformer( false , new ViewPager.PageTransformer() {
     @Override
     public void transformPage(View page, float position) {
         // do transformation here
         }
});

transformPage(View page, float position)方法有两个参数,page参数代表当前view 或 fragment,position参数就是它的位置的值。滑动的时候,起始page和目标page的各自的transformPage()就会被同时触发调用。一个page的position为0代表它处于中间,为1代表它完全处于右边,为-1代表它完全处于左边。
官方文档是这样说的,position是一个page相对于屏幕中心的位置。position的值跟随用户滑动page而变化。当page填充屏幕完全可见的时候,它的position是0;page位于屏幕右边,它的position是1。两个page同时滑动到一半的时候,左边page的position是-0.5,右边page的position是0.5。(因为左右是对称的)所以,为了不考虑正负值,我们取position的绝对值:
final float normalizedposition = Math. abs(Math. abs(position) - 1);




现在左右两个page各自有了一个0到1之间的normalizedposition值(左边在递减[1,0],右边在递增[0,1]),怎么用就靠你了。比如,首先,我们可以做一个淡入淡出效果
[Java] 纯文本查看 复制代码
?
1
2
3
4
5
@Override
public void transformPage(View page, float position) {
     final float normalizedposition = Math.abs(Math.abs(position) - 1 );
     page.setAlpha(normalizedposition);
}


尺寸大小变化效果:
[Java] 纯文本查看 复制代码
?
1
2
3
4
5
6
@Override
public void transformPage(View page, float position) {
final float normalizedposition = Math.abs(Math.abs(position) - 1 );
     page.setScaleX(normalizedposition / 2 + 0 .5f);
     page.setScaleY(normalizedposition / 2 + 0 .5f);
}


最后一个例子是使page沿Z轴方向旋转30度:
[Java] 纯文本查看 复制代码
?
1
2
3
4
@Override
public void transformPage(View page, float position) {
     page.setRotationY(position * - 30 );
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值