ViewPager+Fragment实现滑动标签页

一开始学习ViewPager的时候看网上很多例子配合的适配器都是直接new 一个PagerAdapter然后重写其中的一些方法而且不是配合Fragment使用的,使用的时候比较麻烦。官方推荐适配器是FragmentPagerAdapter,继承FragmentPagerAdapter重写其中的两三个方法就行,使用比较的简单。接下来看代码:

FragmentPagerAdapter

public class MyFragmentPagerAdapter extends FragmentPagerAdapter{
    public MyFragmentPagerAdapter(FragmentManager fm) {
        super(fm);
    }


    @Override
    public int getCount() {
        return fragment的数量;
    }

    @Override
    public Fragment getItem(int arg0) {
        return 返回响应的fragment;
    }
}

一般就重写这两个方法就行,使用相当的方便。

ViewPager

mPager = (ViewPager)findViewById(R.id.viewpager);
//给ViewPager设置适配器
mPager.setAdapter(new MyFragmentPagerAdapter(getSupportFragmentManager());
        mPager.setCurrentItem(0);//设置当前显示标签页为第一页
        mPager.setOnPageChangeListener(new MyOnPageChangeListener());//页面变化时的监听器

使用也很简单,要注意一点是在创建MyFragmentPagerAdapter的时候,参数要使用相匹配的这里使用的v4的包所以用的是getSupportFragmentManager(),我建议是都导入v4的包,如果使用的是v13的包在后面要将的自定义滑动动画的时候会有问题,到现在我也没有解决。

ViewPager自定义滑动动画

其实主要就是setPageTransformer方法。

mPager.setPageTransformer(true,new ViewPager.PageTransformer){
@Override
public void transformPage(View page ,float position)
//在这里写动画效果就行
}

transformPage中的第二个参数是我们能实现动画效果的关键,你可以搭个log看下,你在滑动时它的变化,一个view越被拖出去这个值就越小,当某一页面填充屏幕,它的值为0。当页面刚向屏幕右侧方向被拖走,它的值为1。如果用户在页面1和页面2间滑动到一半,那么页面1的position为-0.5并且页面2的position为 0.5。大致就是这样,具体如何实现可以参考官网:http://developer.android.com/training/animation/screen-slide.html,我这里不再给出例子。

你可能感兴趣的:(viewpager)