ViewPage 是在Android研发中经常会用到的一个组件,无论是在实现图片的切换或者还是搭建整个项目的框架都是非常好用且强大的虽然官方对viewpage 的研发还不完整 但这样也不影响我们在研发中使用它。这篇博客就主要是用来介绍viewpage在滑动过程的动画效果,具体的viewpage的实现可以自己去学习下 也比较的简单。

setPageTransformer方法只可以在Android版本3、0以上使用 !在3.0以下的版本设置是没有效果的!现在我们先来介绍以下怎么在3.0以上的版本使用 :

以下是在Android API 中谷歌官方给定的 动画源代码 :

import android.support.v4.view.ViewPager.PageTransformer;
 import android.view.View;


 public class DepthPageTransformer implements PageTransformer {
     private static float MIN_SCALE = 0.75f;


     public void transformPage(View view, float position) {
         int pageWidth = view.getWidth();
         if (position < -1) {
             view.setAlpha(0);
         } else if (position <= 0) {
             view.setAlpha(1);
             view.setTranslationX(0);
             view.setScaleX(1);
             view.setScaleY(1);
         } else if (position <= 1) {
             view.setAlpha(1 - position);
             view.setTranslationX(pageWidth * -position);
             float scaleFactor = MIN_SCALE + (1 - MIN_SCALE) * (1 - Math.abs(position));
             view.setScaleX(scaleFactor);
             view.setScaleY(scaleFactor);
         } else {
             view.setAlpha(0);


         }
     }


 }

PageTransformer接口 然而从官方给定的动画源码中我们也可以看出来为什么 切换的动画只能在3.0以上版本使用,因为transformPage方法中使用了属性动画 而属性动画也是在3.0以上版本才可以使用的。下面我们来大体讲解一下该段代码:

首先是transformPage方法中的view ,view表示的是当前的界面 position 是一个很有用的参数 我们需要根据position的值来标示当前的界面是划入的界面还是画出的界面,比如 当前的界面是A界面 隐藏的界面为B界面 当向左滑动A界面 A画出屏幕 B界面划入屏幕的过程中 相对于A 界面 position的值是 从 0~-1之间 B界面的值是 从0~1直接的变化。这一点很重要!!在了来看上面的if语句 if (position < -1) 表示A界面完全的划出了界面 则将A界面的透明度设置为0

if (position <= 0) 表示A界面正在滑动中 将接A界面平移出去 没有效果。当 if (position <= 1 表示 B界面正在划入 所以设置了 B界面缩放和透明度 并将B 界面事先移动到了A界面层级的下面 。但我们需要自己来实现动画效果时也主要实现的就是这两个语句。

好了,3.0 以上的版本 viewpage 的动画切换效果实现完毕了

接下来我们讲诉一下怎么 向下兼容来 在低版本的Android系统上实现 viewpage的切换动画效果,

其实也很简单

第一步 映入 ninoldandroid 的jar 包 这个包就用来实现属性动画的兼容包 因为在上文我们也提到了 viewpage的动画就是使用的属性动画  所以只要 将 transformPage方法中的view.setAlpha(0) 修改成为 ViewHelper.setAlpha(view,0).全部使用ViewHelper来实现即可!

第二步 修改viewpage类的源码:

当我们点击查看 setPageTransformer 的源码时会发现 官方给定的 viewpage。setPageTransformer 方法中 首先对Android的 版本进行了判断 只有版本大于11 才会执行动画 为了跳过这个判断 在低版本中也可以实现 我们需要拷贝viewpage的源码 去掉 setPageTransformer方法中的if判断语句即可 然后在项目中使用我们修改过的viewpage。

以上就是在本文的全部内容 !