安卓开发中实现可滑动区域触顶的提示

news2025/2/27 7:25:15

这篇博客记录在开发中使用 CoordinatorLayout、AppBarLayout  、CollapsingToolbarLayout实现监听滑动悬停的触顶提示,有不理解的小伙伴可移步之前的文章——安卓开发中上滑触顶悬停

上述三个控件的结构图如下,在滑动时需要触顶的部分需要在 AppBarLayout  、CollapsingToolbarLayout 之间,我们现在需要在实现监听触顶从而实现在触顶之后的某种操作

这篇博客文章探讨了在安卓开发过程中,如何利用 CoordinatorLayoutAppBarLayoutCollapsingToolbarLayout 这三个组件来实现滑动时的触顶悬停监听功能。对于那些对这一概念不太熟悉的朋友,可以参考我之前的文章——《安卓开发中的上滑触顶悬停技巧》。

这三个控件的层级结构如下所示。在滑动操作中,需要实现触顶效果的部分应当位于 AppBarLayout 和 CollapsingToolbarLayout 之间。我们的目标是实现一个监听机制,以便在用户滑动触顶时触发特定的操作。

废话不多说,直接上代码
 

    //判断会员权益tab是否到顶部(会员)
    private fun checkTabTop(isVipExpires:Boolean) {
        val appBarLayout = mDatabind.scVipAppBar
        val scVipTab = mDatabind.scVipTab

        //verticalOffset 是一个表示从 AppBarLayout 的原始位置向下滚动的像素值的整数。正值表示向下滚动,负值表示向上滚动。
        appBarLayout.addOnOffsetChangedListener { _, verticalOffset ->

            AppLogTask.get().pushEventLog(
                "AppBarLayout",
                "Offset: $verticalOffset,scVipTab:${scVipTab.top}"
            )

            //当verticalOffset + scVipTab.top和为0时就是tab到顶部的位置了
            //scVipTab.top的值是常量
            val isAtTop = verticalOffset + scVipTab.top == 0
            
            updateTabVisibility(isAtTop, isVipExpires)
        }
    }

        这段代码用于检测一个名为 scVipTab 的 UI 组件(我用的是一个 imageView 组件)是否随着 AppBarLayout 的滚动而到达顶部。这个检测依赖于 AppBarLayout 的滚动偏移量 verticalOffset。以下是对这段代码的详细解释:

1、变量初始化

  • 通过数据绑定获取 AppBarLayout 的实例。AppBarLayout 是一个可滚动的顶部应用栏,通常包含 Toolbar 或其他视图组件。
  • 通过数据绑定获取名为 scVipTab 的 UI 组件的实例,这可能是一个是一个 imageView 组件。

2、滚动监听器 appBarLayout.addOnOffsetChangedListener { _, verticalOffset -> ... }:为 AppBarLayout 添加一个滚动偏移变化监听器。当 AppBarLayout 滚动时,会触发这个监听器

3、日志记录:AppLogTask.get().pushEventLog("......."):记录当前的滚动偏移量 verticalOffset 和 scVipTab 的顶部位置 top。这有助于调试和监控滚动行为。

4、触顶判断 val isAtTop = verticalOffset + scVipTab.top == 0:计算 AppBarLayout 的滚动偏移量 verticalOffset 加上 scVipTab 的顶部位置 top 是否等于 0。如果等于 0,表示 scVipTab 已经滚动到顶部,然后执行需要的操作就完事儿了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2214260.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

培训学校小程序开发

我是【码云数智】平台的黄导,今天分享:培训学校小程序开发 知识付费小程序能够实现线上音频课程、视频课程、直播课程以及专栏课程和图文课程,并且我们也针对营销端做了很多营销功能,可以精准触达目标用户,实现内容的…

软件设计之Redis(3)

软件设计之Redis(3) 路线图推荐: 【Java学习路线-极速版】【Java架构师技术图谱】 尚硅谷Redis零基础到进阶,最强redis7教程,阳哥亲自带练(附redis面试题) 资料可以去尚硅谷官网免费领取 感谢学习笔记提供&#xff1a…

探索OpenCV的人脸检测:用Haar特征分类器识别图片中的人脸

目录 简介 OpenCV和Haar特征分类器 实现人脸检测 1. 导入所需库 2. 加载图片和Haar特征分类器 3. 检测人脸 4. 标注人脸 5. 显示 6、结果展示 结论 简介 在计算机视觉和图像处理领域,人脸识别是一项重要的技术。它不仅应用于安全监控、人机交互&#xff0…

日期类的实现和取地址运算符重载

前面将类学的差不多,接下来我们就来实现一下日期类。这个日期类包含运算符重载和前面学 的C的语法知识。 首先我们先建立一个日期类的头文件和源文件: 一.日期类的头文件实现: 首先我们要知道我们有闰年,还有每个月的天数也不一样…

推挽电路(图腾柱)

推挽电路:Push-Pull 即推-拉的意思。 推挽电路本质是功率放大电路(放大电流),增大输入信号的驱动能力,具有以下两个特点。 1 很强的灌电流,即向负载注入大电流。 2 很强的拉电流,即从负载抽取…

【vue3】图片上传功能实现

本次功能使用的是vue3elementplusnodejsmultiparty实现的图片上传与使用。 属于自行摸索的部分,有很大改进地方。目前思路是图片和数据分别上传,在上传图片时返回图片地址,将地址保存到表单数据中,在获取图片时,通过地…

智能优化算法-蛇优化算法(SO)(附源码)

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1.内容介绍 蛇优化算法 (Snake Optimization Algorithm, SO) 是一种基于群体智能的元启发式优化算法,它模拟了蛇的捕食行为、运动模式和社会互动,用于解决复杂的优化问题。 SO的工作机制主要包括&a…

跨平台设计利器:五款免费UI设计工具推荐

1、即时设计 即时设计是一款国产的在线UI设计工具,它以其强大的原型设计功能和丰富的交互效果而受到设计师的喜爱。即时设计支持300多种交互效果,可以帮助设计师快速构建高保真原型。它还提供了设计交付功能,允许设计师直接在平台上创建用户…

版权科普:版权保护的常见误区,你中招了吗?

在当今信息爆炸的时代,版权保护成为了一个备受关注的话题。然而,对于版权保护,很多人存在着一些误解和误区。 首先,让我们来明确一下什么是版权保护。 版权保护指的是对文学、艺术和科学领域内具有独创性并能以某种有式复制的智力…

Linux系统使用NFS挂载共享目录

一、目的 服务器A 共享目录 /data 服务器B 挂载服务器A的目录 /data 服务器C 挂载服务器A的目录 /data … 上面的/data 只是举例,也可以是自定义的路径 二、常见的使用场景 ①、应用多实例多机器部署的情况下,有一些下载或者上传的模板文件&#xff…

taozige/Java语言的Netty框架+云快充协议1.5+充电桩系统+新能源汽车充电桩系统源码

云快充协议云快充1.5协议云快充1.6云快充协议开源代码云快充底层协议云快充桩直连桩直连协议充电桩协议云快充源码 介绍 云快充协议云快充1.5协议云快充1.6云快充协议开源代码云快充底层协议云快充桩直连桩直连协议充电桩协议云快充源码 软件架构 1、提供云快充底层桩直连协…

提升职场办公效率的电脑桌面悬浮窗便签有什么?

电脑桌面悬浮窗便签软件能够帮助我们更好地管理日常任务、记录灵感瞬间,提升职场办公效率,并且保持工作区的整洁。这类软件通常具备以下特点:简易实用、快速记录、功能齐全、以及跨平台同步功能等等。今天为大家推荐一款简单好用的电脑桌面悬…

高可用之限流-06-slide window 滑动窗口 sentinel 源码

限流系列 开源组件 rate-limit: 限流 高可用之限流-01-入门介绍 高可用之限流-02-如何设计限流框架 高可用之限流-03-Semaphore 信号量做限流 高可用之限流-04-fixed window 固定窗口 高可用之限流-05-slide window 滑动窗口 高可用之限流-06-slide window 滑动窗口 sen…

二维码:理解二维码 / 生成二维码 / 小程序支持哪种类型的二维码 / 小程序识别GS1码

一、理解二维码 1.1、概念 二维码(2-dimensional bar code),又称二维条码,最早发源于日本,它是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的&am…

10月15日 -- 11月15日 ,参与《人工智能导论》学习打卡赢B站大会员

一、活动参与地址 点击链接进行活动报名>>>https://momodel.cn/classroom/course/detail?id6173911eab37f12b14daf4a8&activeKeyinfo&srcbef3adb478 二、活动详情 进入链接点击报名,仅需每天参与吴超老师的《人工智能导论》打卡活动&#xff0…

day11-SpringMVC

一、SpringMVC 1.SpringMVC流程分析 2.各种注解 3.接收请求参数 3.1 简单类型 3.2 对象类型 3.3 数组类型 3.4 集合类型 3.5 日期类型 3.6 json参数类型 3.7 路径参数 二、统一异常处理 三、Restful

一个月学会Java 第16天 注解和异常处理

Day16 注解和异常处理 为什么一定要标注是元注解呢,这个原因其实非常的简单,因为注解现在还不能写,想要使用注解达到SpringMVC和SpringBoot的等级需要使用反射,但是反射我们现在还不会,所以就先讲讲最基本的元注解。 第…

MOS管的电路应用

MOS管的电路应用 MOS管的选型参考 1、MOS管类型 一般选择增强型NMOS管,同等工艺条件下,导通电阻Ron更小,发热更低,允许通过的电流更大,型号也更多。 2、Vgs电压 需要考虑开启电压,驱动电压,极…

每日一刷——10.14——括号匹配(手写栈来实现)

栈与队列题目 第一题 题目 问题描述】设计一个算法判别一个算术表达式的圆括号是否正确配对 【输入形式】一个以为结尾的算术表达式 【输出形式】若配对,则输出圆括号的对数;否则输出no 【样例输入】 (ab)/(cd) 【样例输出】 2 【样例说明】共有两对括…

带隙基准Bandgap电路学习(三)

一、导入器件到版图中 从原理图中导入器件: Connectivity——>Generate——>All From Source I/O Pins暂不添加,后面自己画 PR(Primary Region)Boundary: 通常是用来定义芯片设计中某些关键区域的轮廓,比…