最近研究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);
- }
- }
- }