`

ViewPager子View滑动事件冲突

 
阅读更多
iewPager来实现左右滑动切换tab,如果tab的某一项中嵌入了水平可滑动的View就会让你有些不爽,比如想滑动tab项中的可水平滑动的控件,却导致tab切换。

因为Android事件机制是从父View传向子View的,可以去检测你当前子View是不是在有可滑动控件等,决定事件是否拦截,但是这个比较麻烦,而且并不能解决所有的问题(必须检测触摸点是否在这个控件上面),其实有比较简单的方法,在你嵌套的控件中注入ViewPager实例(调用控件的getParent()方法),然后在onTouchEvent,onInterceptTouchEvent,dispatchTouchEvent里面告诉父View,也就是ViewPager不要拦截该控件上的触摸事件。

1
requestDisallowInterceptTouchEvent(true)
代码一般如下:

public boolean onTouch(View v, MotionEvent event) {
    switch (event.getAction()) {
    case MotionEvent.ACTION_MOVE:
        pager.requestDisallowInterceptTouchEvent(true);
        break;
    case MotionEvent.ACTION_UP:
    case MotionEvent.ACTION_CANCEL:
        pager.requestDisallowInterceptTouchEvent(false);
        break;
    }
}
当用户按下的时候,我们告诉父组件,不要拦截我的事件(这个时候子组件是可以正常响应事件的),拿起之后就会告诉父组件可以阻止。

ScrollView的源码中有比较详细的代码,那个对触摸滑动的处理更精确一些,垂直滑动的时候,基本可以做到不会和viewpager冲突。



ViewGroup.onInterceptTouchEvent(MotionEvent) - 这允许一个视图组ViewGroup 在分发给子视图时观察这些事件。ViewParent.requestDisallowInterceptTouchEvent(boolean) - 在一个父视图之上调用这个方法来表示它不应该通过onInterceptTouchEvent(MotionEvent)来捕获触摸事件。
类似解决博客
http://blog.csdn.net/mcy478643968/article/details/19609407
http://stackoverflow.com/questions/7098868/viewpager-inside-viewpager
http://www.cnblogs.com/xinye/archive/2013/06/09/3129140.html
分享到:
评论

相关推荐

    Android listview和viewpager解决冲突 滑动冲突

    Android listview viewpager 滑动 跳动 冲突解决 ListView中嵌套ViewPage有或者滑动手势冲突解决 blog 地址 : http://blog.csdn.net/aaawqqq/article/details/43824631

    ViewPager禁止滑动及与内层View水平滑动事件冲突解决案例

    1、ViewPager中嵌套3个View,当从View1滑动到View2时禁止ViewPager的滑动事件。 2、通过View2底部改变页面的布局实现滑动到View1和View3. 3、View2内嵌的View中还存在一个可以左右滑动的View,在其上添加了手势,即...

    完美解决ViewPager两层嵌套滑动问题

    重写了子viewpager的方法,...解决了父viewpager不能滑动或者子viewpager不能滑动问题。修改了事件的分发。可以使子viewpager滑动到最后一页后直接滑入父viewpager的fragment。修改子viewpager可参考local.xml 。

    ViewPager嵌套滑动冲突解决

    多个ViewPager嵌套的滑动冲突的处理,处理方法简单易懂,还标有注释,使用过程中没有bug,希望对大家有帮助吧

    ViewPager和SlidingPaneLayout的滑动事件冲突解决方法

    这是因为SlidingPaneLayout的设计机制,旨在屏蔽子View的滑动事件,以便实现自己的滑动效果。 解决办法:自定义SlidingPaneLayout类 为了解决这个问题,我们可以自定义SlidingPaneLayout类,并重写其...

    ViewPager+Fragment左右滑动+上下滑动不冲突

    当ViewPager中的Fragment包含可滚动的内容(如ScrollView或ListView)时,可能会出现上下滑动与ViewPager的左右滑动冲突。为了解决这个问题,我们需要自定义一个ViewPager,覆盖其`onInterceptTouchEvent...

    自定义ViewGroup垂直水平滑动解决ViewPager冲突

    总结来说,自定义ViewGroup实现垂直和水平滑动并解决与ViewPager冲突,涉及的关键技术点包括:事件分发机制的理解、触摸事件的处理、滑动动画的实现以及手势检测。掌握这些技能对于提升Android应用的用户体验至关...

    View的滑动冲突处理方案

    在Android开发中,View的滑动冲突处理是一个常见的问题,特别是在多层嵌套布局中,如ScrollView、HorizontalScrollView、ViewPager等。滑动冲突通常发生在两个或更多可滑动的视图试图同时响应用户的滑动手势时。本...

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

    - **使用OnTouchListener**:为ViewPager设置一个OnTouchListener,当检测到垂直滑动时,返回false,这样事件会传递给子View处理。但是这种方法可能需要复杂的逻辑来判断滑动方向。 - **重写ViewPager**:自定义一...

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

    在Android应用开发中,滑动冲突是一个常见的问题,特别是在使用诸如ViewPager、ScrollView等滚动视图时。滑动冲突主要分为两种类型:同方向滑动冲突和不同方向滑动冲突。 1. 同方向滑动冲突:例如,当一个...

    竖向滑动viewpager和横向滑动viewpager混用

    - 为了使两个ViewPager协同工作,可能需要在适配器中嵌套其他的PagerAdapter,或者使用嵌套滚动机制(NestedScrollView)来处理滑动冲突。 4. **滑动事件处理** - 当两个ViewPager同时存在时,滑动事件的处理变得...

    全网唯一有用的解决方案!彻底解决VerticalViewPager嵌套RecyclerView引起的滑动冲突!

    在Android开发中,我们经常会遇到View之间滑动事件的冲突问题,特别是在复杂的布局嵌套情况下,如VerticalViewPager(垂直滚动的ViewPager)与RecyclerView的组合。本文将深入探讨这个问题,并提供一个全网唯一的、...

    ScrollView嵌套ViewPager,可滑动,可动态设置ViewPager高度

    NestedScrollView能够识别其内部子视图的滑动事件,从而避免滑动冲突。 2. **重写OnTouchListener**:在ScrollView或NestedScrollView中,可以重写onTouchEvent()方法,根据滑动方向判断应该由哪个组件处理滑动事件...

    Android中DrawerLayout+ViewPager滑动冲突的解决方法

    另外,我们还可以使用其他方法来解决滑动冲突的问题,例如,我们可以使用 requestDisallowInterceptTouchEvent 方法来请求 DrawerLayout 不要拦截滑动事件,从而让 ViewPager 来处理滑动事件。 解决 Android 中 ...

    自定义ViewPager,完美解决ListView和ScrollView事件冲突

    自定义的ViewPager,可以实现页面之前的相互切换,可以...同时该ViewPager解决了传统ViewPager和ListView,ScrollView滑动冲突问题,当然ListView的滑动冲突实在ScrollView中解决的。实践表明,滑动切换效果较好。

    仿微信ViewPager框架带滑动条

    - 如果滑动条是`SeekBar`,可以考虑禁用触摸反馈,以防止与ViewPager的滑动冲突。 7. **测试与调试** - 进行详尽的测试,确保滑动条与ViewPager的滑动同步无误,同时检查不同设备和屏幕尺寸下的表现。 - 使用...

    Android中ViewPager带来的滑动卡顿问题解决要点解析

    总结起来,解决Android中ViewPager滑动卡顿问题的关键在于理解requestDisallowInterceptTouchEvent()的作用,以及如何在SwipeRefreshLayout中自定义事件处理逻辑,以实现正确的滑动冲突管理。这样,既可以保持...

    解决ViewPager和SlidingPaneLayout的滑动事件冲突问题

    ViewPager和SlidingPaneLayout的滑动事件冲突。 问题分析: 在手指左右滑动时,SlidingPaneLayout会屏蔽ViewPager的滑动事件。 解决办法: 自定义SlidingPaneLayout类 import android.content.Context; import ...

    view的事件传递机制与滑动冲突

    理解并熟练掌握View的事件传递机制和滑动冲突的解决方法,对于编写高效、用户体验良好的Android应用至关重要。开发者需要根据实际应用场景灵活运用这些知识,确保应用的交互流畅性。在实践中,可能会遇到各种复杂...

    Android 中SwipeRefreshLayout与ViewPager滑动事件冲突解决方法

    除了上述解决方案外,还有其他处理滑动冲突的方法,例如自定义SwipeRefreshLayout或ViewPager的行为,或者使用第三方库来解决此类冲突。例如,有些开发者会选择使用`NestedScrollView`或`CoordinatorLayout`来更精细...

Global site tag (gtag.js) - Google Analytics