Android viewpager 界面切换动画实现

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

     进入主题,viewpage 默认的滑动效果是平移的, 当向一个方向滑动的时候 当前的界面会平移出屏幕 隐藏的界面也会平移的进入屏幕 ,很多的时候我们们需要在滑动的时候给 界面的进入和退出添加 动画效果 增强界面的表现力,而官方也为我们提供了这样的一个方法 ViewPager.setPageTransformer ,在该方法中需要传入 PageTransformer 对象 ,然而PageTransformer 仅仅是一个界面 其中之包含一个方法 transformPage(View view, float position) 这个方法就是实现动画的关键。但是,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。

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值