news 2026/7/4 9:23:50

NestedScrollView实现嵌套滑动机制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
NestedScrollView实现嵌套滑动机制

一、Android事件分发

Android的事件从Activity开始,向顶层view进行分发,顶层view再向次级view,即它的子view进行分发,依次类推,直到找到第一个可以处理此事件的view,事件分发成功。如果,最终都没能找到合适的View,则此事件序列自动消失的。

事件派发完后进行事件的消费,如果view不处理该事件,则在onTouchEvent方法里,针对donw事件返回false,表示不消费事件。事件交还给它的父view处理,依次类推,如果都不消费,事件返回给Activity,此事件消失。事件的消费是从子view到父view再到activity。

二、NestedScrollView事件处理模型

        NestedScrollView事件处理模型,是通过由消费事件的View发起和协调。父view被动接收回调,并在回调中处理消费事件,父view回调完成子view继续处理,这样反复进行,达到子view和父view交替消费事件的嵌套滑动效果。

我们看到最终的效果可能是:一次事件序列,子view滑动->父view滑动->子view滑动->父view滑动,知道事件被消费完或者达到子view分配上限3次。

通过一个简单的事件处理模型理解嵌套滑动:

  1. 子view消费事件前,总是先询问父view是否需要消费;
  2. 父view消费事件后,子view在消费剩余的部分;
  3. 一个事件子view最多询问父view两次,若第三次还有剩余,子view会全部消费掉。
  4. 中途不论父view还是子view将事件全部消费完,则事件派发提起结束。

 

三、NestedScrollView嵌套滑动源码分析

NestedScrollView是AndroidX中的插件,依赖AndroidX之后就可以使用该控件。

写一个简单的布局,父控件包含一个图片,一段文字,以及包裹一个子控件。子控件包含一段文字。

        在子类onTouchEvent方法中实现嵌套滑动:

 1、在ACTION_DOWN事件中调用startNestedScroll方法,开启嵌套滑动,这里helper是NestedScrollingChildHelper,这个是处理嵌套滑动的帮助类,使用它来简化我们需要处理的工作。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/4 9:23:44

炉石传说BepInEx插件深度解析:HsMod高效游戏增强技术实现指南

炉石传说BepInEx插件深度解析:HsMod高效游戏增强技术实现指南 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod HsMod是基于BepInEx框架开发的炉石传说游戏增强插件,为…

作者头像 李华
网站建设 2026/7/4 9:20:48

如何使用FLoRES-200评估基准?完整入门教程与最佳实践

如何使用FLoRES-200评估基准?完整入门教程与最佳实践 【免费下载链接】flores Facebook Low Resource (FLoRes) MT Benchmark 项目地址: https://gitcode.com/gh_mirrors/fl/flores FLoRES-200(Facebook Low Resource MT Benchmark)是…

作者头像 李华
网站建设 2026/7/4 9:19:35

gsplat完整指南:如何快速掌握CUDA加速的高斯溅射技术

gsplat完整指南:如何快速掌握CUDA加速的高斯溅射技术 【免费下载链接】gsplat CUDA accelerated rasterization of gaussian splatting 项目地址: https://gitcode.com/GitHub_Trending/gs/gsplat gsplat是一个基于CUDA加速的高斯溅射(Gaussian S…

作者头像 李华
网站建设 2026/7/4 9:18:07

PaperOnboarding:打造惊艳Material Design引导页的终极指南

PaperOnboarding:打造惊艳Material Design引导页的终极指南 【免费下载链接】paper-onboarding-android :octocat: PaperOnboarding is a material design slider made by Ramotion 项目地址: https://gitcode.com/gh_mirrors/pa/paper-onboarding-android 想…

作者头像 李华
网站建设 2026/7/4 9:17:48

MinIO实战——从环境搭建到生产级文件上传的完整链路

MinIO实战——从环境搭建到生产级文件上传的完整链路 从Windows上的MinIO服务部署,到Spring Boot集成,到文件上传的全链路实现——文件名自动生成、扩展名白名单、路径穿越防护、上传方式动态切换。这篇不是API翻译,是一个真实项目里跑了两年…

作者头像 李华
网站建设 2026/7/4 9:14:57

解决LLM编码复杂性陷阱的工程实践指南

解决LLM编码复杂性陷阱的工程实践指南 【免费下载链接】andrej-karpathy-skills A single CLAUDE.md file to improve Claude Code behavior, derived from Andrej Karpathys observations on LLM coding pitfalls. 项目地址: https://gitcode.com/GitHub_Trending/an/andrej…

作者头像 李华