做了一个项目,首页是使用ResideMenu实现,通过菜单栏里的菜单项创建的Fragment;所以一个Activtiy里就包含多个Fragment,想通过手势也能侧滑,就不用点击菜单按钮打开menu了;
方法如下:
在activity的oncreate()中初始化手势监听器
mGestureDetector = new GestureDetector(getApplicationContext(), new MyGestureListener(getApplicationContext()));
然后写一个类继承手势监听器,当然你也可以采用匿名的方法:
/******************************手势监听器**************************************/
class MyGestureListener extends GestureDetector.SimpleOnGestureListener {
Context mContext;
MyGestureListener(Context context) {
mContext = context;
}
@Override
public boolean onDown(MotionEvent e) {
LogUtils.d(TAG,"onDown---DOWN " + e.getAction());
return false;
}
@Override
public void onShowPress(MotionEvent e) {
LogUtils.d(TAG, "onShowPress---DOWN " + e.getAction());
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
LogUtils.d(TAG, "onSingleTapUp---DOWN " + e.getAction());
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,float distanceX, float distanceY) {
resideMenu.openMenu(ResideMenu.DIRECTION_LEFT);
LogUtils.d(TAG, "onScroll---DOWN " + e2.getAction());
return false;
}
@Override
public void onLongPress(MotionEvent e) {
LogUtils.d(TAG, "onLongPress---DOWN " + e.getAction());
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {
LogUtils.d(TAG, "onFling---DOWN " + e2.getAction());
return false;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
LogUtils.d(TAG, "onDoubleTap---DOWN " + e.getAction());
return false;
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
LogUtils.d(TAG, "onDoubleTapEvent---DOWN " + e.getAction());
return false;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
LogUtils.d(TAG, "DOWN " + e.getAction());
return false;
}
}
/********************************************************************/
在onscroll方法中进行你要的滑动监听
注意:这个需要在activity中重写俩个方法:
/**
* 重写触摸事件
* @param event
* @return
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
return mGestureDetector.onTouchEvent(event);
}
/**
* 如果触摸事件下有控件点击事件,则重写下面方法
* @param ev
* @return
*/
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if(mGestureDetector.onTouchEvent(ev)){
return mGestureDetector.onTouchEvent(ev);
}
return super.dispatchTouchEvent(ev);
}
在单个activity中只需要重写第一个方法就行