smilevchy
6/16/2016 - 1:07 AM

CustomMainDrawerLayout.java

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);
    }
}