最近研究SlidingMenu开源库,发现它里面有一个ViewPagerActivity的例子。但在这个例子中,ViewPager只支持单向滑动。稍作一点修改,即可实现双向滑动。
- 原始的ViewPagerActivity.java代码。
public class ViewPagerActivity extends BaseActivity { public ViewPagerActivity() { super(R.string.viewpager); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ViewPager vp = new ViewPager(this); vp.setId("VP".hashCode()); vp.setAdapter(new ColorPagerAdapter(getSupportFragmentManager())); setContentView(vp); vp.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int position) { switch (position) { case 0: getSlidingMenu().setTouchModeAbove( SlidingMenu.TOUCHMODE_FULLSCREEN); break; default: getSlidingMenu().setTouchModeAbove( SlidingMenu.TOUCHMODE_MARGIN); break; } } }); vp.setCurrentItem(0); getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); } public class ColorPagerAdapter extends FragmentPagerAdapter { private ArrayList<Fragment> mFragments; private final int[] COLORS = new int[] { R.color.red, R.color.green, R.color.blue, R.color.white, R.color.black }; public ColorPagerAdapter(FragmentManager fm) { super(fm); mFragments = new ArrayList<Fragment>(); for (int color : COLORS) mFragments.add(new ColorFragment(color)); } @Override public int getCount() { return mFragments.size(); } @Override public Fragment getItem(int position) { return mFragments.get(position); } } }
- 改动后的ViewPagerActivity.java代码。
public class ViewPagerActivity extends BaseActivity { public ViewPagerActivity() { super(R.string.viewpager); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getSlidingMenu().setSecondaryMenu(R.layout.menu_frame_two); getSlidingMenu().setSecondaryShadowDrawable(R.drawable.shadowright); getSupportFragmentManager().beginTransaction().replace(R.id.menu_frame_two, new SampleListFragment()).commit(); ViewPager vp = new ViewPager(this); vp.setId("VP".hashCode()); final ColorPagerAdapter cpa = new ColorPagerAdapter(getSupportFragmentManager()); vp.setAdapter(cpa); setContentView(vp); vp.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int position) { int lastPostion = cpa.getCount() - 1; //请看这里 if (position == 0) { getSlidingMenu().setMode(SlidingMenu.LEFT); // 第一个。SlidingMenu仅有左边有效 getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); } else if (position == lastPostion) { getSlidingMenu().setMode(SlidingMenu.RIGHT); // 最后一个。SlidingMenu仅有右边有效 getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); } else { getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_NONE); // 中间,SlidingMenu无效 } } }); vp.setCurrentItem(0); getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); getSlidingMenu().setMode(SlidingMenu.LEFT); } public class ColorPagerAdapter extends FragmentPagerAdapter { private ArrayList<Fragment> mFragments; private final int[] COLORS = new int[] { R.color.red, R.color.green, R.color.blue, R.color.white, R.color.black }; public ColorPagerAdapter(FragmentManager fm) { super(fm); mFragments = new ArrayList<Fragment>(); for (int color : COLORS) mFragments.add(new ColorFragment(color)); } @Override public int getCount() { return mFragments.size(); } @Override public Fragment getItem(int position) { return mFragments.get(position); } } }