SlidingPanelayout:禁用并启用滑动

时间:2015-04-17 11:07:54

标签: android slidingpanelayout

我正在将SlidingPanelLayout与ViewPager一起使用,并希望每当用户将ViewPager片段作为内容片段时,禁用用于打开菜单的滑动手势。我该怎么办?

1 个答案:

答案 0 :(得分:0)

我有 slidingPanel SlidingPaneLayout和 pager ViewPager,我将展示我的示例。 Firstable创建自定义SmartSlidingPane类,如下面的示例



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




然后你应该在你的xml中使用这个自定义类,如



<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>
&#13;
&#13;
&#13;

在主要活动中定义您的SmartSlidingPane布局,例如 (SmartSlidingPane)findViewById(R.id.slidingPanel); 这就是全部