SlidingMenu与ViewPager双向滑动的解决方案

来源:互联网 发布:句子知乎诗词 编辑:程序博客网 时间:2024/06/05 06:33

最近研究SlidingMenu开源库,发现它里面有一个ViewPagerActivity的例子。但在这个例子中,ViewPager只支持单向滑动。稍作一点修改,即可实现双向滑动。

  • 原始的ViewPagerActivity.java代码。

[java] view plaincopy
  1. public class ViewPagerActivity extends BaseActivity {  
  2.   
  3.     public ViewPagerActivity() {  
  4.         super(R.string.viewpager);  
  5.     }  
  6.   
  7.     @Override  
  8.     public void onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.   
  11.         ViewPager vp = new ViewPager(this);  
  12.         vp.setId("VP".hashCode());  
  13.         vp.setAdapter(new ColorPagerAdapter(getSupportFragmentManager()));  
  14.         setContentView(vp);  
  15.   
  16.         vp.setOnPageChangeListener(new OnPageChangeListener() {  
  17.             @Override  
  18.             public void onPageScrollStateChanged(int arg0) {  
  19.             }  
  20.   
  21.             @Override  
  22.             public void onPageScrolled(int arg0, float arg1, int arg2) {  
  23.             }  
  24.   
  25.             @Override  
  26.             public void onPageSelected(int position) {  
  27.                 switch (position) {  
  28.                 case 0:  
  29.                     getSlidingMenu().setTouchModeAbove(  
  30.                             SlidingMenu.TOUCHMODE_FULLSCREEN);  
  31.                     break;  
  32.                 default:  
  33.                     getSlidingMenu().setTouchModeAbove(  
  34.                             SlidingMenu.TOUCHMODE_MARGIN);  
  35.                     break;  
  36.                 }  
  37.             }  
  38.   
  39.         });  
  40.   
  41.         vp.setCurrentItem(0);  
  42.         getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);  
  43.     }  
  44.   
  45.     public class ColorPagerAdapter extends FragmentPagerAdapter {  
  46.   
  47.         private ArrayList<Fragment> mFragments;  
  48.   
  49.         private final int[] COLORS = new int[] { R.color.red, R.color.green,  
  50.                 R.color.blue, R.color.white, R.color.black };  
  51.   
  52.         public ColorPagerAdapter(FragmentManager fm) {  
  53.             super(fm);  
  54.             mFragments = new ArrayList<Fragment>();  
  55.             for (int color : COLORS)  
  56.                 mFragments.add(new ColorFragment(color));  
  57.         }  
  58.   
  59.         @Override  
  60.         public int getCount() {  
  61.             return mFragments.size();  
  62.         }  
  63.   
  64.         @Override  
  65.         public Fragment getItem(int position) {  
  66.             return mFragments.get(position);  
  67.         }  
  68.   
  69.     }  
  70.   
  71. }  

  • 改动后的ViewPagerActivity.java代码。

[java] view plaincopy
  1. public class ViewPagerActivity extends BaseActivity {  
  2.    
  3.     public ViewPagerActivity() {  
  4.         super(R.string.viewpager);  
  5.     }  
  6.    
  7.     @Override  
  8.     public void onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.         getSlidingMenu().setSecondaryMenu(R.layout.menu_frame_two);  
  11.         getSlidingMenu().setSecondaryShadowDrawable(R.drawable.shadowright);  
  12.         getSupportFragmentManager().beginTransaction().replace(R.id.menu_frame_two, new SampleListFragment()).commit();  
  13.    
  14.         ViewPager vp = new ViewPager(this);  
  15.         vp.setId("VP".hashCode());  
  16.         final ColorPagerAdapter cpa = new ColorPagerAdapter(getSupportFragmentManager());  
  17.         vp.setAdapter(cpa);  
  18.         setContentView(vp);  
  19.         vp.setOnPageChangeListener(new OnPageChangeListener() {  
  20.             @Override  
  21.             public void onPageScrollStateChanged(int arg0) {  
  22.             }  
  23.    
  24.             @Override  
  25.             public void onPageScrolled(int arg0, float arg1, int arg2) {  
  26.             }  
  27.    
  28.             @Override  
  29.             public void onPageSelected(int position) {  
  30.                 int lastPostion = cpa.getCount() - 1;  
  31.                 //请看这里  
  32.                 if (position == 0) {  
  33.                     getSlidingMenu().setMode(SlidingMenu.LEFT); // 第一个。SlidingMenu仅有左边有效  
  34.                     getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);  
  35.                 } else if (position == lastPostion) {  
  36.                     getSlidingMenu().setMode(SlidingMenu.RIGHT); // 最后一个。SlidingMenu仅有右边有效  
  37.                     getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);  
  38.                 } else {  
  39.                     getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_NONE); // 中间,SlidingMenu无效  
  40.                 }  
  41.             }  
  42.         });  
  43.    
  44.         vp.setCurrentItem(0);  
  45.         getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);  
  46.         getSlidingMenu().setMode(SlidingMenu.LEFT);  
  47.     }  
  48.    
  49.     public class ColorPagerAdapter extends FragmentPagerAdapter {  
  50.    
  51.         private ArrayList<Fragment> mFragments;  
  52.    
  53.         private final int[] COLORS = new int[] { R.color.red, R.color.green, R.color.blue, R.color.white, R.color.black };  
  54.    
  55.         public ColorPagerAdapter(FragmentManager fm) {  
  56.             super(fm);  
  57.             mFragments = new ArrayList<Fragment>();  
  58.             for (int color : COLORS)  
  59.                 mFragments.add(new ColorFragment(color));  
  60.         }  
  61.    
  62.         @Override  
  63.         public int getCount() {  
  64.             return mFragments.size();  
  65.         }  
  66.    
  67.         @Override  
  68.         public Fragment getItem(int position) {  
  69.             return mFragments.get(position);  
  70.         }  
  71.    
  72.     }  
  73.    
  74. }  
1 0
原创粉丝点击