SildingMenu和ViewPager的结合使用及怎么实现ViewPager是滑动到首页左滑才出现菜单栏的

思路导读:在ViewPager的滑动监听方法中,判断是不是第一页,如果是第一页就让SildingMenu可以滑动,如果不是,就不让滑动,这时候会有一个小问题,就是已进入程序,ViewPager是第一页,但是还是不能左滑显示菜单栏,怎么解决呢,这时候利用ViewPager.getCurrentItem() == 0来让SildingMenu滑动,具体实现代码如下所示:

public class MainActivity extends SlidingFragmentActivity implements OnClickListener{

	private static final String TAG = MainActivity.class.getSimpleName();
//	private int windowHeight;		// 屏幕的高度
   <span style="white-space:pre">	</span>private int windowWidth;		// 手机屏幕的宽度
	private SlidingMenu slidingMenu;
	public FragmentManager mFragmanager;
	private MenuFragment menuFragment;
	private View mainView;
	private TextView mTitleTv,rightImg;
	private ImageView LeftImg;
	private long exitTime;
	private ViewPager mViewPager;
	private ArrayList<Fragment>  fragments;
	private OneFragment oneFragment;
	private TwoFragment twoFragment;
	private ThreeFragment threeFragment;
	private FourFragment fourFragment;
	private FiveFragment fiveFragment;
	private SixFragment sixFragment;
	private SevenFragment sevenFragment;
	private EightFragment eightFragment;
	private NineFragment nineFragment;
	private TenFragment tenFragment;
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.activity_main);
		mainView = findViewById(R.id.main);
		setBehindContentView(R.layout.menu_frame);		// 设置侧滑菜单布局
		getWindowMesure();
		initSlidingMenu();
		initView();
		event();
	}
	
	/**初始化控件*/
	private void initView() {
		mTitleTv = (TextView) findViewById(R.id.title_tv);
		LeftImg = (ImageView) findViewById(R.id.title_back_img);
		rightImg = (TextView) findViewById(R.id.title_right_img);
		LeftImg.setVisibility(View.VISIBLE);
		rightImg.setVisibility(View.VISIBLE);
		mTitleTv.setText(R.string.main);
		rightImg.setText(R.string.title_right);
		
		mViewPager = (ViewPager) findViewById(R.id.viewpager);
		fragments = new ArrayList<Fragment>();
		oneFragment = new OneFragment();
		twoFragment = new TwoFragment();
		threeFragment = new ThreeFragment();
		fourFragment = new FourFragment();
		fiveFragment = new FiveFragment();
		sixFragment = new SixFragment();
		sevenFragment = new SevenFragment();
		eightFragment = new EightFragment();
		nineFragment = new NineFragment();
		tenFragment = new TenFragment();
		
		fragments.add(oneFragment);
		fragments.add(twoFragment);
		fragments.add(threeFragment);
		fragments.add(fourFragment);
		fragments.add(fiveFragment);
		fragments.add(sixFragment);
		fragments.add(sevenFragment);
		fragments.add(eightFragment);
		fragments.add(nineFragment);
		fragments.add(tenFragment);
		mViewPager.setAdapter(new MyFrageStatePagerAdapter(getSupportFragmentManager()));
		
		<strong><span style="color:#009900;">if (mViewPager.getCurrentItem() == 0) {
			slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
		}
		
		mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
			
			@Override
			public void onPageSelected(int arg0) {
				if (arg0 == 0) {
					slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
				}else{
					slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_NONE);
				}
			}
			
			@Override
			public void onPageScrolled(int arg0, float arg1, int arg2) {
				
			}
			
			@Override
			public void onPageScrollStateChanged(int arg0) {
				
			}
		});</span></strong>
	}
	
	private void event() {
		LeftImg.setOnClickListener(this);
		rightImg.setOnClickListener(this);
	}
	
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		return super.onTouchEvent(event);
	}

	/**初始化侧拉菜单*/
	private void initSlidingMenu() {
		slidingMenu = getSlidingMenu();
		slidingMenu.setMode(SlidingMenu.LEFT);
		int slidingWidth = (int)(windowWidth * 0.75);
		slidingMenu.setBehindOffset(windowWidth-slidingWidth);
		slidingMenu.setShadowDrawable(R.drawable.shadow);	// 设置阴影,阴影使用的是shape渐变色
		slidingMenu.setShadowWidthRes(R.dimen.shadow_width);// 设置阴影的高度
		slidingMenu.setFadeEnabled(true);					// 设置滑动时菜单的是否淡入淡出
		slidingMenu.setFadeDegree(0.5f);					// 设置淡入淡出的比例
		slidingMenu.setBehindScrollScale(0.3f);				// 设置滑动时拖拽效果
		// 设置滑动菜单的范围
//		slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
		
		menuFragment = new MenuFragment();
		mFragmanager = getSupportFragmentManager();
		mFragmanager.beginTransaction().replace(R.id.menu, menuFragment, "MENU").commit();
		
		mainView.setOnTouchListener(new OnTouchListener() {
			
			@Override
			public boolean onTouch(View v, MotionEvent event) {
				LogUtil.i(TAG, "onTouch," + v.toString());
				return true;
			}
		});
	}
	
	/**测量当前的屏幕的尺寸*/
	private void getWindowMesure() {
		DisplayMetrics displayMetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
//        windowHeight = displayMetrics.heightPixels;
        windowWidth = displayMetrics.widthPixels;
	}
	
	/**
	 *滑动隐藏键盘
	 */
	public boolean dispatchTouchEvent(MotionEvent ev) {
		int downY = 0;
		int downX = 0;
		switch (ev.getAction()) {
		case MotionEvent.ACTION_DOWN:
			downX=(int) ev.getX();
			downY=(int) ev.getY();
			break;
	
		case MotionEvent.ACTION_MOVE:
			int moveX=(int) ev.getX();
			int moveY=(int) ev.getY();
			if (Math.abs(moveX-downX) >= 0 || Math.abs(moveY-downY) >= 0) {
				View view = getWindow().peekDecorView();
		        if (view != null && view.getWindowToken() != null) { 
		        	InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
		                imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
		        } 
			}
			break;
		}
		return super.dispatchTouchEvent(ev);
	}
	
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			if(slidingMenu.isMenuShowing()){
				slidingMenu.toggle();
				return true;
			}
				if (System.currentTimeMillis() - exitTime  > 800) {
					ToastUtils.show(this, R.string.allback);
					exitTime = System.currentTimeMillis();
				} else {
					finish();
					MyApplication application = (MyApplication) getApplication();
					application.finishAllActivitys();
				}
				return true;
		}
		return super.onKeyDown(keyCode, event);
	}
	
	class MyFrageStatePagerAdapter extends FragmentStatePagerAdapter{

		public MyFrageStatePagerAdapter(FragmentManager fm) {
			super(fm);
		}

		@Override
		public Fragment getItem(int position) {
			return fragments.get(position);
		}

		@Override
		public int getCount() {
			return fragments.size();
		}
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.title_back_img:
			slidingMenu.toggle(true);
			break;
		case R.id.title_right_img:
			startActivity(new Intent(getApplicationContext(), HistoryActivity.class));
			break;

		default:
			break;
		}
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值