完美解决View Pager和SlidingPaneLayout的滑动冲突问题
2016-11-03 18:55
531 查看
我们在做需要带有侧滑栏的框架时难免遇到ViewPager与Fragment的联用,这时我们在页面右划时没有问题,但是当页面需要左划时,就会触发左侧隐藏的SlidingPaneLayout侧滑栏,所以我们下面自定义控件来继承SlidingPaneLayout,写上对应的处理方法来解决冲突事件的发生。
代码如下:
最后,在布局中直接引用新建的类的名字做控件即可!
转载http://blog.csdn.net/dota_wy/article/details/52890870
代码如下:
package com.example.dotawang.puding.custom; import android.content.Context; import android.support.v4.view.MotionEventCompat; import android.support.v4.widget.SlidingPaneLayout; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.ViewConfiguration; /* 在使用侧滑菜单的时候如果主界面中有ViewPager的时候调用该自定义控件,避免二者的冲突事件的发生 */ public class PageEnabledSlidingPaneLayout extends SlidingPaneLayout { private float mInitialMotionX; private float mInitialMotionY; private float mEdgeSlop;//手滑动的距离 public PageEnabledSlidingPaneLayout(Context context) { this(context, null); } public PageEnabledSlidingPaneLayout(Context context, AttributeSet attrs) { this(context, attrs, 0); } public PageEnabledSlidingPaneLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); ViewConfiguration config = ViewConfiguration.get(context); mEdgeSlop = config.getScaledEdgeSlop();//getScaledTouchSlop是一个距离 } @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(); // The user should always be able to "close" the pane, so we only check // for child scrollability if the pane is currently closed. if (mInitialMotionX > mEdgeSlop && !isOpen() && canScroll(this, false, Math.round(x - mInitialMotionX), Math.round(x), Math.round(y))) { // How do we set super.mIsUnableToDrag = true? // send the parent a cancel event MotionEvent cancelEvent = MotionEvent.obtain(ev); cancelEvent.setAction(MotionEvent.ACTION_CANCEL); return super.onInterceptTouchEvent(cancelEvent); } } } return super.onInterceptTouchEvent(ev); }
最后,在布局中直接引用新建的类的名字做控件即可!
转载http://blog.csdn.net/dota_wy/article/details/52890870
相关文章推荐
- 完美解决Android里面scrollview嵌套及listview嵌套viewpager的滑动冲突问题的简单方法
- 完美解决ScrollView嵌套ViewPager滑动失效和无法正常滑动冲突问题
- 完美解决ScrollView嵌套ViewPager滑动失效和无法正常滑动冲突问题
- 完美解决viewpager跟其他类型的listview 或 gridview一起使用时,滑动冲突问题
- 完美解决DrawerLayout全屏滑动及嵌套viewpager滑动冲突问题
- 简单完美解决PullToRefreshLayout中PullableListView嵌套ViewPager时滑动冲突的问题
- 安卓解决viewPager和scrollView和listView滑动冲突的问题
- 解决ScrollView嵌套viewPager中嵌套listView滑动事件冲突问题(水平方向)
- 解决ScrollView嵌套ViewPager出现的滑动冲突问题
- 解决ScrollView嵌套ViewPager出现的滑动冲突问题
- android 布局 使用 viewPager 时,如何解决 和 子页面 长按滑动 冲突问题
- 解决ViewPager和SlidingPaneLayout的滑动事件冲突问题
- fragment加载webView与ViewPager所带来的滑动冲突问题解决方法
- 安卓解决viewPager+scrollView+listView滑动冲突的问题
- 自定义viewpager解决listview和viewpager滑动冲突的问题
- 完美解决SwipeRefreshLayout与RecyclerView滑动冲突问题
- Android ScrollView嵌套ViewPager滑动失效和无法正常滑动冲突问题解决方案
- React Native通过修改ScrollableTabView和ViewPager来解决左右滑动冲突的问题
- 解决ViewPager横向的ViewGroup滑动冲突的问题,例如HorizontalListView,RecyclerView,各种layout等
- 解决ScrollView和VerticalViewPager滑动事件冲突问题