`
dawuafang
  • 浏览: 1156886 次
文章分类
社区版块
存档分类
最新评论

当ViewPager嵌套在ScrollView/ListView里时,手势冲突如何处理?

 
阅读更多

当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和ListView

    ScrollView嵌套ViewPager,ViewPager横向滑动时容易上下滚动处理; ScrollView嵌套ListView,ListView滚动事件处理,可滚动; ScrollView子控件获取焦点后自动置顶问题处理。 ListView滚动到顶或到底事件监听。

    scrollview与listview,viewpager共存

    在ScrollView中嵌套ListView会导致性能问题,因为ScrollView会尝试管理其所有子视图的滚动,而ListView已经在处理自己的滚动逻辑。 然后是ViewPager。ViewPager允许用户在多个页面之间水平滑动,常用于实现Tab切换...

    ScrollingTricks效果 ScrollView嵌套Viewpager嵌套Listview

    一个特效Demo 具体看博客http://blog.csdn.net/liubo20140401/article/details/47907039 一个向上滑动 tab固定顶部 scrollview中嵌套viewpager嵌套listview 还有回到顶部

    Scrollview_ViewPager_ListView

    2. **性能问题**:嵌套布局会增加层级,可能导致绘制性能下降,尤其是在处理大量数据时,ListView的滚动性能会受到影响。 3. **适配器管理**:如果ListView位于ViewPager的页面中,那么其Adapter需要与ViewPager的...

    viewpage嵌套listview,效果:滑动listview删除,滑动非listview区域viewpage翻页

    标题"viewpage嵌套listview,效果:滑动listview删除,滑动非listview区域viewpage翻页"描述的就是这样一个功能:在ViewPager中嵌套了一个ListView,ListView支持滑动删除,而当滑动到ListView之外的区域时,...

    Android:ScrollView中嵌套ViewPager和ListView示例

    然而,当我们在ScrollView中嵌套复杂的组件,如ViewPager或ListView时,可能会遇到一些挑战。本文将深入探讨如何在ScrollView中正确地嵌套这两个组件,以及可能遇到的问题及其解决方案。 首先,我们来看ScrollView...

    Scrollview中嵌套ViewPager和ListView常出现的问题

    ListView同ViewPager类似,必须指定固定高度之后,才可以显示相应的高度,否则只显示一个Item的内容高度,然后在ListView区域上下滑动时,Scrollview并没有效果,而是实现的是ListView的上下滚动事件。

    ScrollView+ListView+ViewPager滑动不冲突

    6. **使用Flag**:在处理滑动事件时,可以设置标志位来跟踪当前哪个组件正在处理滑动,避免多个组件同时响应滑动。 7. **合理布局**:优化布局设计,尽量避免不必要的嵌套,减少滑动冲突的可能性。 通过上述策略的...

    解决ScrollView嵌套ListView问题的几种方案

    然而,当在一个ScrollView中嵌套一个ListView时,会遇到一系列的问题,主要是由于两者都具有滚动功能,导致冲突,用户体验受到影响。本文将探讨几种解决这种问题的方案。 ### 方案一:使用NestedScrollView替代...

    scrollview嵌套viewpager嵌套fragmetn嵌套recyclerview的demo

    本示例"scrollview嵌套viewpager嵌套fragmetn嵌套recyclerview的demo"正是为了解决这些问题,并展示如何优雅地处理这些组件的嵌套。 首先,`ScrollView`是一个可滚动的容器,它可以包含一个或多个视图,允许用户...

    ScrollView中嵌套listview

    然而,当ScrollView和ListView同时存在,即“ScrollView中嵌套ListView”,就会出现滑动冲突的问题。这是因为两个组件都具有滚动功能,它们对触摸事件的处理可能会相互干扰。本篇将详细解析这个问题及其解决方案。 ...

    ScrollView+ViewPager+ListView或RecyclerView

    当我们需要在`ScrollView`中嵌套`ViewPager`,或者`ScrollView`内包含`ListView`或`RecyclerView`时,需要注意滚动冲突问题。因为`ScrollView`默认会尝试处理所有子视图的滚动事件,这可能导致滚动行为不正常。为...

    ViewPager事件分发及嵌套冲突处理

    然而,当ViewPager与其他可滑动或触摸交互的组件(如ScrollView、ListView等)一起使用时,可能会出现事件分发和嵌套冲突的问题,导致用户体验下降。本文将深入探讨这个问题,并提供解决方案。 **1. 事件分发机制**...

    scrollview+viewPager+listview

    在Android开发中,`ScrollView`、`ViewPager`和`ListView`是三种常见的视图组件,它们各自有不同的功能和用途,但有时需要将它们结合起来以实现更复杂的用户界面。标题"scrollview+viewPager+listview"揭示了这样一...

    应用源码之ViewPager中嵌套ListView实现了下拉刷新和上拉更多,解决了冲突的问题。.zip

    本项目中,开发者通过源码实现了一个`ViewPager`中嵌套`ListView`的示例,同时添加了下拉刷新和上拉更多的功能,并解决了通常在这种嵌套结构中会遇到的冲突问题。 首先,`ViewPager`是一个用于展示多个碎片...

    Android App中ViewPager所带来的滑动冲突问题解决方法

    1. 同方向滑动冲突:例如,当一个ScrollView内部嵌套了另一个ScrollView或ListView时,用户滑动屏幕可能会引发冲突,因为两者都在同一方向上响应滑动操作。这种情况下,通常需要通过编程方式确定哪个视图应该是主导...

    安卓Android事件分发处理 scrollview套scrollview+scrollview.其中viewpager下套listview 带悬浮框效果

    整体可上下滑动,当滑动到悬浮框的位置,嵌套的listview 可以滑到,悬浮停留在顶部。主要处理事件分发 和事件消费dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent 3个方法对事件的拦截与否。10分我都觉得...

    Android-复杂界面实现RecyclerView嵌套ViewPagerRecyclerView多布局实现

    3. 在RecyclerView的Adapter中,在需要嵌套ViewPager的条目位置,创建并设置ViewPager的Adapter。 4. 在RecyclerView的ViewHolder中,为ViewPager添加监听事件,以便在用户滑动时响应。 此外,为了优化性能,避免...

    Android三层滑动控件显示冲突和ViewPager高度动态调整的解决方案Demo

    在这种场景下,"Android三层滑动控件显示冲突和ViewPager高度动态调整的解决方案Demo"是一个非常实用的示例,它解决了ListView、ViewPager以及Fragment三层嵌套时可能出现的滑动冲突问题,并且能够动态调整ViewPager...

Global site tag (gtag.js) - Google Analytics