滑动面板布局:禁用并启用滑动



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

我里面有滑动面板滑动窗格布局和寻呼器ViewPager,我将展示我的示例。首先创建自定义 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>

在您的主要活动中定义您的智能滑动窗格布局,例如(SmartSlidingPane) findViewById(R.id.slidingPanel);仅此而已

最新更新