0

I am using SlidingPanelLayout together with a ViewPager and would like to disable swipe gesture used to open the menu whenever user has the ViewPager fragment as the content fragment. How can I do it?

1 Answers1

0

I have slidingPanel SlidingPaneLayout and pager ViewPager inside it i will show my example. Firstable create custom SmartSlidingPane class like example below

public class SmartSlidingPane extends SlidingPaneLayout {
    private float mInitialMotionX;
    private float mInitialMotionY;
    private float mEdgeSlop;

    public SmartSlidingPane(Context context) {
        this(context, null);
    }

    public SmartSlidingPane(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public SmartSlidingPane(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

        ViewConfiguration config = ViewConfiguration.get(context);
        mEdgeSlop = config.getScaledEdgeSlop();
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {

        switch (MotionEventCompat.getActionMasked(ev)) {
            case MotionEvent.ACTION_DOWN: {
                mInitialMotionX = ev.getX();
                mInitialMotionY = ev.getY();
                break;
            }

            case MotionEvent.ACTION_MOVE: {
                final float x = ev.getX();
                final float y = ev.getY(); 
                if (mInitialMotionX > mEdgeSlop && !isOpen() && canScroll(this, false,
                        Math.round(x - mInitialMotionX), Math.round(x), Math.round(y))) {
 
                    MotionEvent cancelEvent = MotionEvent.obtain(ev);
                    cancelEvent.setAction(MotionEvent.ACTION_CANCEL);
                    return super.onInterceptTouchEvent(cancelEvent);
                }
            }
        }

        return super.onInterceptTouchEvent(ev);
    }
}

then you should use this custom class in your xml like

<app.info.rashjz.amuse.adapter.SmartSlidingPane
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/slidingPanel"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <include layout="@layout/menu" />

    <LinearLayout
        android:id="@+id/main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="right"
        android:orientation="vertical">



        <android.support.v4.view.ViewPager
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@android:color/transparent">
        </android.support.v4.view.ViewPager>

    </LinearLayout>

</app.info.rashjz.amuse.adapter.SmartSlidingPane>

define your SmartSlidingPane Layout in your main activity like (SmartSlidingPane) findViewById(R.id.slidingPanel); and thats all

Rashad
  • 80
  • 2
  • 8