您的位置:首页 > 其它

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

2015-11-27 09:41 323 查看
思路导读:在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;
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: