首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一文解决Android View滑动冲突

如果你对View的事件分发还不熟悉,建议先去看一下 一文读懂Android View事件分发机制 它是我们今天滑动冲突解决的理论基础!...2 滑动冲突的常见场景与处理思路 当我们内外两层View都可以滑动时候,就会产生滑动冲突! 常见的滑动冲突场景: ?...同方向,横向滑动冲突 天猫的这个是同方向,横向滑动冲突的场景,内外两层都是可以横向滚动的。它的处理逻辑也很明显,根据用户滑动的位置来判断到底是那个View需要响应滑动。...3 滑动冲突解决套路 套路一 外部拦截法: 即父View根据需要对事件进行拦截。逻辑处理放在父View的onInterceptTouchEvent方法中。...虽然这并不是常规的滑动冲突(子View不是滑动的),但是造成的原因其实是一样的,没有做滑动判断导致父View不能正确响应滑动事件。

1.7K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android View滑动冲突全面解析-夯实基础

    常见的滑动冲突场景 常见的滑动冲突可以简单分为如下三种: 场景1——外部滑动方向和内部滑动方向不一致 场景2——外部滑动方向和内部滑动方向不一致 常见3——上面两种情况的嵌套。...滑动冲突的处理规则 一般来说,不管滑动冲突多么复杂,他都有既定的规则,根据这些规则我们就可以选择合适的方法去处理。...对于场景2来说,无法根据滑动的角度,距离差以及速度差来做判断,但是这个时候一般都能在业务上找到突破点,比如说,在某些状态下,外部View响应用户滑动,而处于另一种滑动时则需要内部View来响应View滑动...滑动冲突的解决方式 首先我们先分析第一种滑动冲突场景,这也是最简单,最典型的一种滑动冲突,你可能要说,这有啥冲突的啊,ViewPager和上下滑动本来就不冲突啊,这是因为ViewPager已经帮你处理好了...针对滑动冲突,这里给出两种解决方式:外部拦截法和内部拦法。

    42120

    View的事件分发及滑动冲突的解决

    事件会继续传递给子view 3、在子view中对事件进行了消费,viewGroup将接受不到任何事件\ 五、滑动冲突 5.1、滑动冲突产生的原因 当我们内外两层View都可以滑动时候,就会产生滑动冲突...5.2、滑动冲突的结局方法 1、外部拦截法 重写父viewGroup的onInterceptTouchEvent,根据逻辑在MotionEvent.ACTION_MOVE中进行拦截 //伪代码 override...事件都将默认交给父View去处理 c、原则上ACTION_UP也需要返回false,如果返回true,并且滑动事件交给子View处理,那么子View将接收不到ACTION_UP事件,子View的onClick...而父View不一样,如果父View在ACTION_MOVE中开始拦截事件,那么后续ACTION_UP也将默认交给父View处理 2、内部拦截法 子view重写dispatchTouchEvent,根据逻辑在...标志位控制,一旦父容器拦截ACTION_DOWN那么所有的事件都不会传递给子View b、滑动策略的逻辑放在子View的dispatchTouchEvent方法的ACTION_MOVE中,如果父容器需要获取点击事件则调用

    84140

    View滑动冲突的分析和处理实践

    View滑动实现方式。...demo源码地址 ---- 目录 常见的滑动冲突场景 滑动冲突的处理规则 滑动冲突的解决方式 实例验证 处理水平滑动和竖直滑动冲突 处理水平滑动、竖直滑动、水平滑动一起出现的情况 ---- 常见的滑动冲突场景...虽然看起来很复杂,实际上还是几个单一的冲突叠加的,我们只要逐一击破即可。 ---- 滑动冲突的处理规则 一般来说,不管滑动冲突多么复杂,都有既定的规则,从而我们可以选择合适的方法去处理。...对于上面的场景一:外部滑动方向和内部滑动方向不一致,我么只需在左右滑动时让外部的View上拦截点击事件,当用户上下滑动时,则让内部View拦截处理。...内层的水平滑动冲突

    49040

    SwipeRefreshLayout嵌套banner滑动冲突

    纵向滑动就拦截事件,横向滑动不拦截。 怎么判断是纵向滑动还是横向滑动,只要判断Y轴的移动距离大于X轴的移动距离那么就判定为纵向滑动就行了。...* Describe : 重写SwipeRefreshLayout的onIntercept方法解决与viewpager冲突问题。 * 思路: * 1....因为下拉刷新,只有纵向滑动的时候才有效,只需要判断此时是纵向滑动还是横向滑动就可以了。 * 2. 纵向滑动就拦截事件,横向滑动不拦截。 * 3....怎么判断是纵向滑动还是横向滑动,只要判断Y轴的移动距离大于X轴的移动距离那么就判定为纵向滑动就行了。...扩展: SwipeRefreshLayout 嵌套 RecyclerView滑动冲突 SwipeRefreshLayout 嵌套ScrollView 滑动冲突 ScrollView嵌套RecyclerView

    82310

    谷歌地图与 NestedScrollView 滑动冲突

    某天,项目收尾时,愕然发现在某页 Google Map 与当前页面滑动冲突,最直接的表现结果便是,手指触摸地图进行滑动时,地图视觉卡顿且页面会随着手指滑动滑动,顿时很蛋疼,脑海第一想法事件分发,拦截丫的不就好了吗...import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import...android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout...com.google.android.gms.maps.SupportMapFragment; /** * @author: heliquan * @data: 2019/1/11 * @desc: 解决谷歌地图与 NestedScrollView 滑动冲突...getMapAsync(this) 到这里,小手点点冲突问题变解决咯~ 还是要多去积累,多去深入。

    1.3K20

    Android 中 View滑动

    Android View控件的滑动是 Android 的一个重要内容。...在 View 需要变换位置时,为其添加适当的滑动效果,获得更好的用户体验,下面来看一下怎样去实现 View滑动: 1、scrollBy / ScrollTo 方法: View 控件提供的两个方法...在上面的滑动中,效果是瞬间完成的,在 APP 中,这种效果会给人一种非常突兀的感觉。Scroller 类正是为了给 View滑动添加动画效果产生的。...View 的 computeScroll() 方法: 3、调用 startScroll(int startX, int startY, int dx, int dy)方法开始 View滑动,参数分别为开始的位置和横纵方向滑动的位移...成功的实现了滑动效果! 不知道小伙伴们发现没有,在这里实现的滑动都是对当前控件的全部的子 View 进行滑动,这样在一定程度上限制了滑动的灵活性。那么我们如何处理单个 View滑动呢?

    92040

    自定义View基础(二)View滑动

    Android 自定义View View滑动 ---- 在移动设备上,滑动基本是基础特性。不管是用的最多的下拉刷新还是ViewPager,他们的基础都是滑动。...View滑动实现方法也是绚丽的自定义View的基础知识。...1、实现View滑动的三种方式 1.1使用ScrollTo/ScrollBy 首先我们来看一下这两个函数的源码: public void scrollTo(int x, int y) {...by是基于参数的相对滑动,而to是制定位置的决定滑动。 需要注意的是这两个方法只能改变View内容的位置而不能改变View在布局中的位置。...2、View滑动三种方式的对比 scrollTo/scrollBy:操作简单,但是局限明显,适合对View内容的滑动 动画:操作简单,由于现在基本上都是3.0以上版本Android系统,所有可以适合几乎所有情况

    44220

    ViewPager,ScrollView 嵌套ViewPager滑动冲突解决

    的事件分发机制 解决事件滑动冲突的思路及方法 ScrollView 里面嵌套ViewPager导致的滑动冲突 ViewPager里面嵌套ViewPager 导致的滑动冲突 轮播图的几种实现方式 文章首发地址...---- 解决事件滑动冲突的思路及方法 常见的三种情况 第一种情况,滑动方向不同 ? 第二种情况,滑动方向相同 ? 第三种情况,上述两种情况的嵌套 ?...解决思路 看了上面三种情况,我们知道他们的共同特点是父View 和子View都想争着响应我们的触摸事件,但遗憾的是我们的触摸事件 同一时刻只能被某一个View或者ViewGroup拦截消费,所以就产生了滑动冲突...View是左右滑动的情况。...滑动事件冲突没有多大关系,只是给读者提供多种思路而已 至于CoordinatorLayout,是google IO 2015中提出来的,功能很强大,可以说是专门为了解决嵌套导滑动而产生的,极大地方便了开发者

    5.7K51

    ViewPager,ScrollView 嵌套ViewPager滑动冲突解决

    这篇博客主要讲解一下几个问题 粗略地介绍一下View的事件分发机制 解决事件滑动冲突的思路及方法 ScrollView 里面嵌套ViewPager导致的滑动冲突 ViewPager里面嵌套ViewPager...---- 解决事件滑动冲突的思路及方法 常见的三种情况 第一种情况,滑动方向不同 第二种情况,滑动方向相同 第三种情况,上述两种情况的嵌套 解决思路 看了上面三种情况,我们知道他们的共同特点是父View...和子View都想争着响应我们的触摸事件,但遗憾的是我们的触摸事件 同一时刻只能被某一个View或者ViewGroup拦截消费,所以就产生了滑动冲突?...的,一般有一下几种实现方式 使用我们上述提高的ScrollView里面嵌套ViewPager和RecyclerView,这种实现方式需要自己解决View滑动事件的冲突,同时还有我在上述提高的在Fragment...滑动事件冲突没有多大关系,只是给读者提供多种思路而已 至于CoordinatorLayout,是google IO 2015中提出来的,功能很强大,可以说是专门为了解决嵌套导滑动而产生的,极大地方便了开发者

    65610
    领券