ViewPager设置自定义切换动画

来源:互联网 发布:wps的数据有效性在哪 编辑:程序博客网 时间:2024/06/06 01:21

ViewPagerFragment切换时有默认的动画效果,项目中可能会遇到需要添加更加炫的Fragment切换效果,ViewPager为我们提供了相对应的方法,我们只需要定义切换的动画即可。

第一步:初始化ViewPager,设置adapter

// Instantiate a ViewPager and a PagerAdapter.
mPagerAdapter= new ScreenSlidePagerAdapter(getSupportFragmentManager());
mPager.setAdapter(mPagerAdapter);

private classScreenSlidePagerAdapterextendsFragmentStatePagerAdapter {
    publicScreenSlidePagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    publicFragment getItem(intposition) {
        ViewPager_Fragment test =newViewPager_Fragment();
        test.setPosition(position);
        returntest;
    }

    @Override
    public intgetCount() {
        returnNUM_PAGES;
    }
}

第二步:设置自定义动画类


mPager.setPageTransformer(true,newZoomOutPageTransformer());

 


public classZoomOutPageTransformerimplementsViewPager.PageTransformer {
    private static final floatMIN_SCALE= 0.85f;
    private static final floatMIN_ALPHA= 0.5f;

    public voidtransformPage(View view,floatposition) {
        intpageWidth = view.getWidth();
        intpageHeight = view.getHeight();

        if(position < -1) {// [-Infinity,-1)
            // This page is way off-screen to the left.
            
view.setAlpha(0);

        } else if(position <= 1) {// [-1,1]
            // Modify the default slide transition to shrink the page as well
            
floatscaleFactor = Math.max(MIN_SCALE,1 - Math.abs(position));
            floatvertMargin = pageHeight * (1- scaleFactor) / 2;
            floathorzMargin = pageWidth * (1- scaleFactor) / 2;
            if(position < 0) {
                view.setTranslationX(horzMargin - vertMargin /2);
            } else{
                view.setTranslationX(-horzMargin + vertMargin /2);
            }

            // Scale the page down (between MIN_SCALE and 1)
            
view.setScaleX(scaleFactor);
            view.setScaleY(scaleFactor);

            // Fade the page relative to its size.
            
view.setAlpha(MIN_ALPHA+
                    (scaleFactor -MIN_SCALE) /
                            (1- MIN_SCALE) * (1- MIN_ALPHA));

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

原创粉丝点击