当ViewPager嵌套在ScrollView/ListView里时,手势冲突如何处理?
有时我们需要将ViewPager嵌套在其他已经含有手势动作的ViewGroup里,如ScrollView,ListView时,会造成手势冲突,如表现为ViewPager向左划时,不小心向上移动了一点距离,ViewPager立刻回弹到原始位置。
主要问题出在ScrollView/ListView作为ViewPager的ParentView,会先接受到触摸信息,而且他们对上下滑动是会做出拦截动作,并接管触摸信息的向下传递,导致ViewPager滑动异常。 先看一种解决方式:
public class ScrollViewExtend extends ScrollView {
private float xDistance, yDistance, xLast, yLast;
public ScrollViewExtend(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
xDistance = yDistance = 0f;
xLast = ev.getX();
yLast = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
final float curX = ev.getX();
final float curY = ev.getY();
xDistance += Math.abs(curX - xLast);
yDistance += Math.abs(curY - yLast);
xLast = curX;
yLast = curY;
if(xDistance > yDistance){
return false;
}
}
return super.onInterceptTouchEvent(ev);
}
}
这种方式的确可以解决这个问题,但是其实Google已经提供了一个函数来解决ParentView与ChildView手势冲突的问题。
public void requestDisallowInterceptTouchEvent(boolean disallowIntercept)
由ViewPager在OnTouch/onInterceptTouchEvent,dispatchTouchEvent中调用即可。
分享到:
相关推荐
ScrollView嵌套ViewPager,ViewPager横向滑动时容易上下滚动处理; ScrollView嵌套ListView,ListView滚动事件处理,可滚动; ScrollView子控件获取焦点后自动置顶问题处理。 ListView滚动到顶或到底事件监听。
ListView同ViewPager类似,必须指定固定高度之后,才可以显示相应的高度,否则只显示一个Item的内容高度,然后在ListView区域上下滑动时,Scrollview并没有效果,而是实现的是ListView的上下滚动事件。
一个特效Demo 具体看博客http://blog.csdn.net/liubo20140401/article/details/47907039 一个向上滑动 tab固定顶部 scrollview中嵌套viewpager嵌套listview 还有回到顶部
Scrollview中嵌套ViewPager和ListView的问题和解决方案
viewpage嵌套listview,效果:滑动listview删除,滑动非listview区域viewpage翻页
scrollview+viewPager+listview自己找了很久分享一下
整体可上下滑动,当滑动到悬浮框的位置,嵌套的listview 可以滑到,悬浮停留在顶部。主要处理事件分发 和事件消费dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent 3个方法对事件的拦截与否。10分我都觉得...
比如ScrollView嵌套ViewPager,或者是ViewPager嵌套ScrollView,这种情况其实很典型。现在大部分应用最外层都是ViewPager+Fragment 的底部切换(比如微信)结构,这种时候,就很容易出现滑动冲突。不
模仿淘宝、京东、蘑菇街商品详情页,可嵌套ListView、WebView、ViewPager、FragmentTabhost等1、支持ScrollView Webview2、支持scollView viewpager(内不可以是listview或者webbiew)3、支持支持ScrollView listview...
ScrollView ListView ViewPager三者嵌套,listview带加载功能。
Android滑动在智能手机上是必备的操作,但是在开发的时候,你...但是在ViewPager内部已经处理了这个冲突,所以我们会发现ViewPager嵌套Fragmnet的时候很是流畅。如果我们采用的不是ViewPager而是ScrollView,那么就需要
比如ScrollView嵌套ViewPager,或者是ViewPager嵌套ScrollView,这种情况其实很典型。现在大部分应用最外层都是ViewPager+Fragment 的底部切换(比如微信)结构,这种时候,就很容易出现滑动冲突。
在Android开发中,如果是一些简单的布局,都很容易搞定,但是一旦涉及到复杂的页面,特别是为了兼容小屏手机而使用了ScrollView以后,就会出现很多点击事件的冲突,最经典的就是ScrollView中嵌套了ListView。...
真实可用的ScrollView嵌套ListView和ViewPager,listview显示完全并可以每个item有点击事件,vierpager同样可以。
又比如一个ViewPager嵌套Fragment,Fragment里面又有ListView,这原本是有滑动冲突的,但是ViewPager内部去帮我们解决了这种冲突。那如果我们要自己解决冲突又该怎么办呢。 下面有两种方式来解决: 外部拦截法 外部...
(1) 自动循环滚动ViewPager、ViewPager嵌套自动滚动ViewPager (2) 网络缓存Demo (3) 图片缓存Demo,图片SD卡缓存Demo (4) 下拉刷新及滚动到底部加载更多listview Demo (6) Android系统下载管理DownloadManager功能...
作者georgeyang1024,源码DoubleScroll,一个 ScrollView 里面包含 viewpager 嵌套 listview 或 RecyclerView 极少代码实现的流畅滑动效果,处理一个两层滑动 view 的自定义布局,以最少的代码实现,可扩展自定义 ...
NestedScrollLayout需求:嵌套滚动,顶部是一个Header,Header下面是一个列表(ListView、RecyclerView、ScrollView等等)或者多个列表(ViewPager)。更复杂一点的,可以设置Header滚动系数,Header与列表进行差速...