【问题标题】:SlidingPanelLayout: disable and enable the swipeSlidingPanelayout:禁用和启用滑动
【发布时间】:2015-04-17 11:07:54
【问题描述】:

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

【问题讨论】:

    标签: android slidingpanelayout


    【解决方案1】:

    我有 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>

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-03
      • 2012-06-26
      • 1970-01-01
      • 2015-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多