如何解决DrawerLayout与Viewpager的滑动冲突
来源:互联网 发布:台球全套教学软件 编辑:程序博客网 时间:2024/06/05 03:27
问题:在viewpager的第一页加入DrawerLayout的时候则会产生左右滑动的冲突
解决思路:
1、当Viewpager滑动到第一页的时候,将Viewpager的右滑禁止掉,这种可以保证DrawerLayout顺利的滑出
2、当DrawerLayout滑出的时候,监听DrawerLayout的滑动事件,滑出完全禁止掉ViewPager的滑动,
当DrawerLayout关闭的时候充值启动ViewPager的滑动
(ps:我也尝试改变事件分发,但还是会有小bug,会的大神可以留言指教下。。。)
代码:
第一步:自定义ViewPager,禁止掉第一页的右滑,同时实现了Viewpager是否允许滑动,调用setNoScroll()即可
import android.content.Context;import android.support.v4.view.ViewPager;import android.util.AttributeSet;import android.view.MotionEvent;/** * 解决ViewPager与DrawerLayout的冲突问题 * 思路:把第一个Fragment的ViewPager的右滑给禁掉 * Created by liuyi on 2015/11/13. */public class MyViewPager extends ViewPager { private float xDistance, xLast; private boolean noScroll = false; public MyViewPager(Context context) { super(context); } public MyViewPager(Context context, AttributeSet attrs) { super(context, attrs); } /** * 禁止第一个frament右滑 * * @param ev * @return */ @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if (noScroll) { return false; } switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: xDistance = 0f; xLast = ev.getX(); break; case MotionEvent.ACTION_MOVE: final float curX = ev.getX(); //第一个Fragment禁止右滑 if (xLast - curX < 0 && getCurrentItem() == 0) { return false; } //最后一个Fragment禁止左滑// if (xLast - curX > 0 && getCurrentItem() == 1) {// return false;// } break; } return super.onInterceptTouchEvent(ev); } @Override public void scrollTo(int x, int y) { super.scrollTo(x, y); } /** * 控制Viewpager是否可滑动 * * @param noScroll : true 不能滑动 */ public void setNoScroll(boolean noScroll) { this.noScroll = noScroll; } @Override public boolean onTouchEvent(MotionEvent arg0) { /* return false;//super.onTouchEvent(arg0); */ if (noScroll) return false; else return super.onTouchEvent(arg0); } @Override public void setCurrentItem(int item, boolean smoothScroll) { super.setCurrentItem(item, smoothScroll); } @Override public void setCurrentItem(int item) { super.setCurrentItem(item); }}
第二步:监听DrawerLayout的滑动,滑出禁止ViewPager的滑动,滑动重新恢复ViewPager的滑动
//处理Viewpager与DrawerLayout滑动的冲突问题 mDrawerLayout.setDrawerListener(new DrawerLayout.DrawerListener() { @Override public void onDrawerSlide(View drawerView, float slideOffset) { } @Override public void onDrawerOpened(View drawerView) { //禁止Viewpager的滑动,从而避免与DrawerLayout的冲突 viewpager.setNoScroll(true); } @Override public void onDrawerClosed(View drawerView) { //解除Viewpager的禁止滑动 viewpager.setNoScroll(false); } @Override public void onDrawerStateChanged(int newState) { } });
2 0
- 如何解决DrawerLayout与Viewpager的滑动冲突
- ViewPager与DrawerLayout以及百度MapView之间滑动冲突的解决
- Android 中 DrawerLayout + ViewPager 怎么解决滑动冲突?
- SwipeRefreshLayout与viewpager的滑动冲突的解决
- SwipeRefreshLayout与viewpager的滑动冲突的解决
- 解决viewpager与gridview之间的滑动冲突
- 解决SlidingMenu与ViewPager的滑动冲突尝试
- ViewPager与SwipeFreshLayout(下拉刷新)滑动冲突的解决
- 解决viewpager与自定义view滑动冲突的问题
- 解决Gallery与viewpager滑动冲突问题
- 解决ResizeMenu与viewpager滑动冲突
- SwipeRefreshLayout与ViewPager滑动事件冲突解决
- SwipeRefreshLayout与ViewPager滑动事件冲突解决
- 完美解决DrawerLayout全屏滑动及嵌套viewpager滑动冲突问题
- 解决 HorizontalScrollView 和 ViewPager 的滑动冲突
- ScrollView嵌套ViewPager滑动冲突的解决
- Listview 嵌套 Viewpager 滑动冲突的解决
- 解决嵌套viewpager滑动冲突的解决方案
- ZJUT_1175
- track a app or a game
- 利用xx-net访问google
- struts2 StrutsPrepareAndExecuteFilter 源码分析
- struct和typedef struct的使用区别
- 如何解决DrawerLayout与Viewpager的滑动冲突
- LeetCode 090 Subsets II
- eclipse中重写(Override)基类方法的方式
- Java读取指定目录下的文件内容
- 获取到中文乱码时的解决思路
- 初遇设计模式
- Android之AlarmManager(全局定时器/闹钟)指定时长或以周期形式执行某项操作
- JS练习:选择颜色,得到其HEX 和RGB
- 同步get获取所关注的最新微博