ViewPager.PageTransformer学习笔记

对于安卓官网的PageTransformer实例,看了很久,终于明白了一点,并记录于此

首先对于ViewPager的使用分为三步
1.在Activity的布局文件中加入ViewPager;
2.创建一个类,继承自FragmentStatePagerAdapter,并实现getItem()与getCount()方法;
3.将Adapter与ViewPager绑定;

对于ViewPager之间切换使用ViewPager.PageTransformer来设置动画
具体过程为自定义类并实现ViewPager.PageTransformer接口,只需要实现其中的
public void transformPage(View view, float position)方法即可;
关键在于对position的理解:
以官网的一个实例来分析:
position表示view相对于屏幕中心位置:当view位于屏幕中心是 position = 0;
当view滑动到屏幕最右边时 position = 1;
当view滑动到屏幕最左边是position = -1;

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

    public void transformPage(View view, float position) {
        int pageWidth = view.getWidth();
        //以向左滑动为例,当position小于-1表示当前view的前一个view
        //向右滑动时,表示当前view的前一个view的前一个view
        if (position < -1) { // [-Infinity,-1)
            // This page is way off-screen to the left.
            view.setAlpha(0f);
        /**当向右滑动时,此处表示当前view的进入动画
         *当向左滑动时,此处表示当前view的退出动画
         *在此代码中关键在于对 view.setTranslationX(0f)方法的理解,此处我从网上找到以下解释
         ***每个View有它自己本身的位置,适配器ViewGroup在左右滑动的过程中,view滑动到哪里它就在哪里,
         *偏移量为0就是保持当前位置不变**
         大概意思就是,采用默认的滑动,view的位置跟着滑动的位置变化
         */
        } else if (position <= 0) { // [-1,0]
            // Use the default slide transition when moving to the left page
            view.setAlpha(1f);
            view.setTranslationX(0f);
            view.setScaleX(1f);
            view.setScaleY(1f);
        /**
        *向右滑动时,此处表示当前view的退出动画
        *向左滑动时,此处表示后一个view的进入动画
        *此处关键是对view.setTranslationX(pageWidth * -position)的理解,
        *当向左开始滑动的时候(position = 1)就让view移动到屏幕正中间,当继续王座滑动,position会减小,
        *通过pageWidth * -position来确保view一直处于屏幕正中间
        *当向右滑动的时候,position = 0,pageWidth * - position = 0,view位于正中间,如果不设置setTranslationX(pageWidth * -position)
        *的话,view会一直往右滑动,通过此设置确保view一直处于屏幕中间位置
        */
        } else if (position <= 1) { // (0,1]
            // Fade the page out.
            view.setAlpha(1 - position);

            // Counteract the default slide transition
            view.setTranslationX(pageWidth * -position);

            // Scale the page down (between MIN_SCALE and 1)
            float scaleFactor = MIN_SCALE
                    + (1 - MIN_SCALE) * (1 - Math.abs(position));
            view.setScaleX(scaleFactor);
            view.setScaleY(scaleFactor);

        } else { // (1,+Infinity]
            // This page is way off-screen to the right.
            view.setAlpha(0f);
        }
    }
}

对ViewPager.PageTransformer的理解,主要是要理解position的意思,并在做平移的时候要理解,如果不设置setTranslationX()方法的时候,view本身就会跟着滑动而平移的。

发布了13 篇原创文章 · 获赞 2 · 访问量 587

猜你喜欢

转载自blog.csdn.net/qq_42806685/article/details/99681286