public class CustomMainDrawerLayout extends DrawerLayout {
private static final String TAG = "CustomMainDrawerLayout";
private float mLastX;
private int mTouchSlop;
private float mEdgeSize;
public CustomMainDrawerLayout(Context context) {
super(context);
init(context);
}
public CustomMainDrawerLayout(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public CustomMainDrawerLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context);
}
private void init(Context context) {
mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop() * 2;
mEdgeSize = DimenUtil.getRealPx(getContext(), 20);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
mLastX = ev.getRawX();
break;
case MotionEvent.ACTION_MOVE:
if (mLastX > mEdgeSize) {
float curX = ev.getRawX();
if (curX >= mLastX && Math.abs(curX - mLastX) > mTouchSlop) {
if (!isDrawerOpen(Gravity.LEFT)) {
openDrawer(Gravity.LEFT);
return true;
}
} else if (curX < mLastX && Math.abs(curX - mLastX) > mTouchSlop) {
if (isDrawerOpen(Gravity.LEFT)) {
closeDrawer(Gravity.LEFT);
return true;
}
}
}
break;
}
return super.onInterceptTouchEvent(ev);
}
}