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     

 

posted @ 2014-12-03 21:31  RoperLee  阅读(269)  评论(0)    收藏  举报