zoukankan      html  css  js  c++  java
  • 自定义viewpager的界面切换动画

     核心操作:
    1、创建一个类实现 android.support.v4.view.ViewPager.PageTransformer 根据 position 实现判断哪个界面进行界面切换动画

    public class RotatePagerPageTransFormer implements android.support.v4.view.ViewPager.PageTransformer{
            private static final float MAXRADIUS = 25f;
            // 当 viewpager 界面切换的时候调用的方法
            //page :  切换的界面
            //position :  切换的界面的状态(切换的界面包含两个界面) , 当前的界面 position 是 0 ,预加载的界面的 position 是 1 ,从右往左切换界面的时候
            // 当前界面的 position 会从 0 开始往 -1 变化,预加载界面的 position 是从 1 开始往 0 变化
            @Override
            public void transformPage(View page, float position) {
                // 实现 viewpager 的切换动画效果
                //System.out.println("viewpager 的界面切换动画状态: "+position);
                // 界面的宽度
                int width = page.getWidth();
                // 因为我们的 viewpager 的动画效果是,当前界面和预加载界面进行动画,其他界面没有动画,那如何知道应该是当前界面和预加载界面执行动画呢?可以通过 position 进行判断
                // 当前界面的 position[0,-1] 预加载界面的 position[1,0]
                // 实现界面的旋转动画效果
                // 参数:旋转的角度
                //page.setRotation(rotation);
                // 判断哪个界面需要执行动画,并执行动画
                if (position < -1) {
                    // 不执行动画
                    page.setRotation(0);
                }else if(position > 1){
                    // 不执行动画
                    page.setRotation(0);
                }else if(position < 0){
                    // 符合 [0,-1] ,当前界面执行动画
                    page.setRotation(position * MAXRADIUS);
                    // 设置旋转的中心点坐标
                    page.setPivotX(width/2);// 设置旋转中心点的 x 的坐标
                    page.setPivotY(page.getHeight());
                }else if(position < 1){
                    // 符合 [0,-1] ,当前界面执行动画
                    page.setRotation(position * MAXRADIUS);
                    // 设置旋转的中心点坐标
                    page.setPivotX(width/2);// 设置旋转中心点的 x 的坐标
                    page.setPivotY(page.getHeight());
                }
            }
        }

    2、在viewpager所在类中调用界面切换动画

    mViewPager.setPageTransformer(true, new RotatePagerPageTransFormer());
  • 相关阅读:
    228. Summary Ranges
    227. Basic Calculator II
    224. Basic Calculator
    222. Count Complete Tree Nodes
    223. Rectangle Area
    221. Maximal Square
    220. Contains Duplicate III
    219. Contains Duplicate II
    217. Contains Duplicate
    Java编程思想 4th 第4章 控制执行流程
  • 原文地址:https://www.cnblogs.com/yegong0214/p/6274967.html
Copyright © 2011-2022 走看看