Android开源代码——MenuDrawer(四)
【MenuDrawer】—— 配合ViewPager使用
1、在之前的博文中已经讲过ViewPager的使用方法,接下来我们就要在那个例子的基础之上(只是换了几张图片,那个例子中图片太大,加载太慢),将MenuDrawer 加进来
2、最终的效果是,当我们滑动到第一张screen_1 的时候,在向右滑动的话,就会出现菜单视图

【实例】
在之前讲过的ViewPager例子的基础上,只添加了几行代码
添加的代码用/*****************************/ 标示包裹着,其他的地方的代码都没有动,你会发现这是多么的简单
1 package com.penglee.viewpaper_test; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import net.simonvt.menudrawer.MenuDrawer; 7 import android.app.Activity; 8 import android.os.Bundle; 9 import android.util.Log; 10 import android.view.View; 11 import android.view.View.OnClickListener; 12 import android.widget.ImageView; 13 import android.widget.TextView; 14 import android.widget.Toast; 15 import android.widget.ImageView.ScaleType; 16 import android.widget.LinearLayout; 17 import android.support.v4.view.ViewPager; 18 import android.support.v4.view.ViewPager.OnPageChangeListener; 19 20 21 public class MainActivity extends Activity implements OnClickListener, OnPageChangeListener{ 22 23 /*****************************************************************************************/ 24 private MenuDrawer mMenuDrawer ; 25 /*****************************************************************************************/ 26 27 private ViewPager viewPager ; 28 private int currentPage = 0; //记录当前处于活动的页面的索引 29 private ImageView [ ] dotViews ; //保存圆点图片 30 //存储ViewPager中要显示的图片的集合 31 int [ ] images = {R.drawable.screen_1 , R.drawable.screen_2 ,R.drawable.screen_3} ; 32 33 34 @Override 35 protected void onCreate(Bundle savedInstanceState) { 36 super.onCreate(savedInstanceState); 37 38 /***************************************************************************************/ 39 mMenuDrawer = MenuDrawer.attach(this, MenuDrawer.MENU_DRAG_CONTENT); 40 mMenuDrawer.setContentView(R.layout.activity_main); //用MenuDrawer对象将主布局文件加载进来,不直接在Activity中加载了 41 TextView text = new TextView(this); 42 text.setText("简易菜单"); 43 mMenuDrawer.setMenuView(text); 44 mMenuDrawer.setTouchMode(MenuDrawer.TOUCH_MODE_FULLSCREEN); 45 /**************************************************************************************/ 46 47 viewPager = (ViewPager)findViewById(R.id.viewPaper); 48 49 //创建Adapter 50 51 List<ImageView> list = new ArrayList<ImageView>() ; 52 53 LinearLayout.LayoutParams mParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, 54 LinearLayout.LayoutParams.WRAP_CONTENT); 55 56 for(int i =0 ; i<images.length ; i ++){ 57 ImageView imageView = new ImageView(MainActivity.this) ; 58 imageView.setLayoutParams(mParams); 59 imageView.setImageResource(images[i]); 60 imageView.setScaleType(ScaleType.FIT_XY); 61 list.add(imageView); 62 } 63 64 ScreenPagerAdapter sPagerAdapter = new ScreenPagerAdapter(list); 65 66 //为ViewPager设置Adapter 67 viewPager.setAdapter(sPagerAdapter); 68 //为ViewPager设置监听器,为的是能够控制圆点的亮暗 69 viewPager.setOnPageChangeListener(MainActivity.this); 70 //对滑动使用动画,这个DepthPageTransformer类是我自己写的一个类,你可以更改它,实现不同的效果,非常的棒 71 viewPager.setPageTransformer(true, new DepthPageTransformer()); 72 73 //对圆点图片进行初始化,控制圆点的亮暗 74 initDot() ; 75 } 76 77 //对圆点图片进行初始化,控制圆点的亮暗 78 public void initDot(){ 79 80 dotViews = new ImageView[ images.length] ; 81 82 LinearLayout ll = (LinearLayout)findViewById(R.id.linearLayout); 83 84 for(int i =0 ; i < dotViews.length ; i++){ 85 dotViews[i] = (ImageView) ll.getChildAt(i); 86 dotViews[i].setSelected(false); //全部设为灰色 87 dotViews[i].setOnClickListener(MainActivity.this); 88 dotViews[i].setTag(i);//为了便于在监听器中进行判别 89 } 90 91 currentPage = 0 ; 92 dotViews[0].setSelected(true); 93 94 } 95 96 /** 97 * 用于设置当前的Screen视图 98 * 99 * */ 100 public void setCurrentPage(int position){ 101 if(position< 0 || position >= images.length){ 102 return ; 103 } 104 viewPager.setCurrentItem(position); 105 } 106 107 /** 108 * 用于设置当前的圆点视图为高亮 109 * 110 * */ 111 public void setCurrentDot(int position){ 112 if(position < 0 || position > images.length - 1 || currentPage == position){ 113 return ; 114 } 115 dotViews[position].setSelected(true); 116 //设置之前的圆点为暗 117 dotViews[currentPage].setSelected(false); 118 119 /*注意不能够使用setEnabled(boolean)方法,首先是要和dot.xml动画文件 对应, 120 其次,是因为enabled属性控制的是:能不能被单击 , 而selected属性才是:当前是否被单击了*/ 121 } 122 123 124 125 //当滑动状态改变时调用 126 @Override 127 public void onPageScrollStateChanged(int arg0) { 128 // TODO Auto-generated method stub 129 130 } 131 132 //当当前页面被滑动时调用 133 @Override 134 public void onPageScrolled(int arg0, float arg1, int arg2) { 135 // TODO Auto-generated method stub 136 137 } 138 139 //当新的页面被选中时调用 140 @Override 141 public void onPageSelected(int arg0) { 142 //将当前的Page对应的小圆点设置为高亮 143 setCurrentDot(arg0); 144 currentPage = arg0; 145 146 /*****************************************************************************************/ 147 mMenuDrawer.setTouchMode(arg0 == 0 148 ? MenuDrawer.TOUCH_MODE_FULLSCREEN 149 : MenuDrawer.TOUCH_MODE_NONE); 150 /*****************************************************************************************/ 151 } 152 153 @Override 154 public void onClick(View v) { 155 int position = (Integer)v.getTag(); 156 setCurrentPage(position); 157 setCurrentDot(position); 158 currentPage = position; 159 } 160 } 161 162

浙公网安备 33010602011771号