今天看到鸿洋大神的微信公众号的推送,有一个打造个性ViewPager的文章,看完之后自己动手写了一下,发现ViewPager动画实现起来真的没那么难,咱们就来慢慢分析ViewPager动画的实现方法。
VIewPager在会有一个接口是专门为了让开发者来解决这个问题的那就是:ViewPager.PageTransformer,这个接口虽然只有一个方法但是那是相当的强大啊,因为这个方法可以获得你是左滑动还是右边滑动,而且可以根据postion来获取你正在滑动的页面位置的变化和被迫滑动页面位置的变化。
什么叫被迫滑动呢?我自己取的一个名字就是你滑动B页面viewpager会自动的把A页面移出去这叫被迫滑动!!!!!!
下面来详细分析这个方法:public voidtransformPage(View page,float position)
page:你当面所触碰的view。
position:这个参数需要举例才能说的更明白一些,假如:A到B页面postion的变化过程是这样的,
A——>postion:0变成-1,当成为-1的时候A页面就完全看不见了
B——>postion:1变成0,当成为0的时候B页面显示在当面页面上,
也就是说左边看不见的是-1,能看见的时候为0,右边为1。理解了这个那么一些动画就可以完成了,我看鸿洋的博客,他自定义了一个viewpager来完成了一个动画效果:
来自鸿洋大神博客
咱们下面就用今天的方法实现一下这个效果,我这里只贴出PageTransformer的代码:
public class MyPageTransformer implements ViewPager.PageTransformer {
@Override
public void transformPage(View page, float position) {
if (position < -1) {
//这个位置是看不见的
page.setScaleY(1f);
} else if (position <= 1) {
//这个位置是你所能看得见的
if (position < 0) {
//左滑动
//向左边滑动的时候当面图片是没有任何的动画变化的所以不用做动画//处理
} else if (position == 0) {
/**
当前的位置是图片在页面上显示的时候,这里做到让他充满整个页面
**/
page.setScaleY(1f);
} else {
//右滑动
/**
当向右滑动的时候让页面从X,Y两个方向压缩
**/
page.setScaleY(Math.max(1 - Math.abs(position), 0.5f));
page.setScaleX(Math.max(1 - Math.abs(position), 0.5f));
}
} else {
page.setScaleY(0f);
}
}
}
最终这个动画就完成了,这里只贴出主要的核心代码。