Android Compose 十:常用组件列表 监听

1 去掉超出滑动区域时的拖拽的阴影

即 overScrollMode
在这里插入图片描述
代码如下

 CompositionLocalProvider(LocalOverscrollConfiguration provides null) {
        LazyColumn(
        ) {
            items(list, key = {list.indexOf(it)}){
                Row(Modifier.animateItemPlacement(tween(durationMillis = 250))) {
                    Text(text = "条目>>${it}")
                }
            }
        }
    }

效果

在这里插入图片描述
如果你都不需要这个效果,可以在MyApplicationTheme的content里 包一层CompositionLocalProvider
MyApplicationTheme
在这里插入图片描述

  • CompositionLocalProvider
    CompositionLocal 是定义数据的方式,而 CompositionLocalProvider 是在 Compose UI 树中传递这些数据的工具。更多自行百度吧

2 滑动监听

2.1 state的监听
  val lazyListState = rememberLazyListState()
    LazyColumn(
        state = lazyListState
    ) {
        items(list, key = { list.indexOf(it) }) {
            Row(Modifier.animateItemPlacement(tween(durationMillis = 250))) {
                Text(text = "条目>>${it}")
            }
        }
    }

官方文档有以下描述
在这里插入图片描述
大意就是,我们需要监听滑动的状态,用于不同的处理
那么我们之前使用recyclerview的时候,可以通过LayoutManager监听滑动,并且可以获取到当前显示的第一条条目和最后一条条目;
然后就可以判断是否上拉加载更多,或者下拉刷新
此处我们改吧改吧

LaunchedEffect(lazyListState) {
        snapshotFlow { lazyListState.isScrollInProgress }   //监听是否在滑动
            .collect {
                Log.i("bl_test","it>>${it}")
                Log.i("bl_test"," lazyListState.firstVisibleItemIndex>>${ lazyListState.firstVisibleItemIndex}")
            }
    }

当我们滑动开始和停止的时候打印如下日志

2024-06-06 11:51:49.816 20115-20115/com.zqq.myapplication I/bl_test: it>>true
2024-06-06 11:51:49.816 20115-20115/com.zqq.myapplication I/bl_test:  lazyListState.firstVisibleItemIndex>>0
2024-06-06 11:51:52.091 20115-20115/com.zqq.myapplication I/bl_test: it>>false
2024-06-06 11:51:52.091 20115-20115/com.zqq.myapplication I/bl_test:  lazyListState.firstVisibleItemIndex>>6

这里暂时不知如何判断 条目完全显示的情况,LayoutManager是有这个方法的;
方案就是 lazyListState 可以获取到第一条目的偏移量 可以通过此来判断;

  • 更多的监听 前面写过interactions 状态监听
  LaunchedEffect(lazyListState){
        lazyListState.interactionSource.interactions.collect{
            Log.i("bl_test","it>>${it}")
            Log.i("bl_test","it>>${it.javaClass}")
            Log.i("bl_test","it>>${it is DragInteraction}")
            Log.i("bl_test","it>>${it is DragInteraction.Start}")
            Log.i("bl_test","it>>${it is DragInteraction.Stop}")
            Log.i("bl_test","it>>${it is DragInteraction.Cancel}")

            if(it is DragInteraction.Stop){  //滑动结束 获取第一条显示的条目
                Log.i("bl_test"," lazyListState.firstVisibleItemIndex>>${ lazyListState.firstVisibleItemIndex}")
                Log.i("bl_test"," lazyListState.firstVisibleItemScrollOffset>>${ lazyListState.firstVisibleItemScrollOffset}")
            }
        }
    }

结果
在这里插入图片描述

  • Modifier.scrollable
 val scrollableState = rememberScrollableState(){
        Log.i("bl_test","it>>"+it)
        it
    }

    LazyColumn(
        state = lazyListState,
        modifier = Modifier.scrollable(
            state = scrollableState,
            orientation = Orientation.Vertical
        )
    ) {
        items(list, key = { list.indexOf(it) }) {
            Row(Modifier.animateItemPlacement(tween(durationMillis = 250))) {
                Text(text = "条目>>${it}")
            }
        }
    }

rememberScrollableState 的 翻译
在这里插入图片描述
打印日志 效果

  • 当未滑动到顶部或者底部时 回调it值一直为0

  • 滑动到顶部继续拖拽时 值 大于0

  • 滑动到底部时 值 小于0

  • 惯性滑动到顶部时 值 大于0 后 递减
    在这里插入图片描述
    …(此处省略大部分值)
    在这里插入图片描述

  • 惯性滑动到顶部时 值 小于0 递增
    在这里插入图片描述
    …(此处省略大部分值)
    在这里插入图片描述

依据此值应该可以判断出 滑动到了底部或者顶部

  • Modifier .verticalScroll()
    报错了
    在这里插入图片描述

  • Modifier .nestedScroll 监听滑动状态

 val nestedConnection  = remember {
        object : NestedScrollConnection{
            override suspend fun onPostFling(consumed: Velocity, available: Velocity): Velocity {
                Log.i("bl_test","onPostFling")
                return super.onPostFling(consumed, available)
            }

            override fun onPostScroll(
                consumed: Offset,
                available: Offset,
                source: NestedScrollSource
            ): Offset {
                Log.i("bl_test","onPostScroll")
                return super.onPostScroll(consumed, available, source)
            }

            override suspend fun onPreFling(available: Velocity): Velocity {
                Log.i("bl_test","onPreFling")
                return super.onPreFling(available)
            }

            override fun onPreScroll(available: Offset, source: NestedScrollSource): Offset {
                Log.i("bl_test","onPreScroll")
                return super.onPreScroll(available, source)
            }
        }
    }

    LazyColumn(
        state = lazyListState,
        modifier = Modifier
            .nestedScroll(
                connection = nestedConnection
            )
    ) {
        items(list, key = { list.indexOf(it) }) {
            Row(Modifier.animateItemPlacement(tween(durationMillis = 250))) {
                Text(text = "条目>>${it}")
            }
        }
    }

结果
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

接口(API)开发,测试工具-apifox

前言 为什么需要接口(API)? 因为不同的平台或系统可能使用不同的技术栈、编程语言或数据格式。API提供了一个标准化的方式,使得这些不同的系统可以相互交换数据和功能调用,实现互操作性 在开发日常的项目交互中,不…

英伟达的GPU(4)

更第四篇,上周有点私事,恢复更新 上次的文章 英伟达的GPU(3) (qq.com) 书接前文,我们上章说要更新GPU的内存机制,本次就讲点这个 先做个定义,我们说内存(显存),也分物理内存&#…

Linux系统推出VB6开发IDE了?Gambas,Linux脚本编写

第一个Linux程序,加法计算加弹窗对话框,Gambas,linux版的类似VB6的IDE开发环境 一开始想用VB6的Clng函数转成整数,没这函数。 输入3个字母才有智能提示,这点没做好 没有msgbox函数,要用messagebox.warning 如果可以添加函数别名就…

【算法篇】求最长公共前缀JavaScript版本

题目描述 给你一个大小为 n 的字符串数组 strs &#xff0c;其中包含n个字符串 , 编写一个函数来查找字符串数组中的最长公共前缀&#xff0c;返回这个公共前缀。 数据范围&#xff1a; 数据范围:0<n<5000&#xff0c;0<len(strsi)< 5000 进阶:空间复杂度 O(1)&a…

2024年第三届数据统计与分析竞赛(B题)数学建模完整思路+完整代码全解全析

你是否在寻找数学建模比赛的突破点&#xff1f;数学建模进阶思路&#xff01; 详细请查 作为经验丰富的数学建模团队&#xff0c;我们将为你带来2024年第三届数据统计与分析竞赛&#xff08;B题&#xff09;的全面解析。这个解决方案包不仅包括完整的代码实现&#xff0c;还有…

Unity | Shader基础知识(番外:了解内置Shader-Standard<一>)

目录 前言 一、什么是Standard 二、Standard参数详解 1.了解着色前 2. 着色拆分 3.参数RenderingMode 4.参数Albedo 5.参数Metallic 三、作者的话 前言 有粉丝给我说&#xff0c;感觉自己内部自带的Shader都还不知道怎么用&#xff0c;希望我讲一下内置Shader。 那…

Docker Desktop - WSL distro terminated abruptly

打开 PowerShell 或以管理员身份运行的命令提示符。运行以下命令以列出已安装的 WSL 分发&#xff1a; wsl --list 运行以下命令以注销 Docker 相关的分发 wsl --unregister <distro_name> 将<distro_name>替换为实际的 Docker 相关分发的名称。将<distro_…

[书生·浦语大模型实战营]——LMDeploy 量化部署 LLM 实践

1.基础作业 1.1配置 LMDeploy 运行环境 创建开发机 创建新的开发机&#xff0c;选择镜像Cuda12.2-conda&#xff1b;选择10% A100*1GPU&#xff1b;点击“立即创建”。注意请不要选择Cuda11.7-conda的镜像&#xff0c;新版本的lmdeploy会出现兼容性问题。其他和之前一样&…

智能组网节点是什么?

智能组网节点是一种用于解决复杂网络环境下远程连接问题的关键技术。它是一种通过智能化的方式&#xff0c;在任何网络环境下实现不同地区之间快速组建局域网的解决方案。其中&#xff0c;【天联】组网就是一款优秀的智能组网节点产品&#xff0c;是北京金万维科技有限公司自主…

苍穹外卖笔记-07-菜品管理-增加、删除、修改、查询分页还有菜品起售或停售状态

菜品管理 1 新增菜品1.1 需求分析与设计1.2 代码开发文件上传新增菜品实现 1.3 功能测试 2 菜品分页查询2.1 需求分析和设计2.2 代码开发设计DTO类设计VO类Controller层Service层Mapper层 2.3 功能测试 3 删除菜品3.1 需求分析和设计3.2 代码开发Controller层Service层Mapper层…

Unity Standard shader 修改(增加本地坐标裁剪)

本想随便找一个裁剪的shader&#xff0c;可无奈的是没找到一个shader符合要求&#xff0c;美术制作的场景都是用的都标准的着色器他们不在乎你的功能逻辑需求&#xff0c;他们只关心场景的表现&#xff0c;那又找不到和unity标准着色器表现一样的shader 1.通过贴图的透明通道做…

【set】集合总结

一、Set Set集合是Collection的子接口,代表一种集合,此种集合是元素不重复. 有两个常用实现类 HashSet 是元素不重复,无序,主要是指遍历顺序和插入顺序不一致 TreeSet 是元素不重复,排序 LinkedHashSet不常用 二、HashSet 1.1 介绍 HashSet是Set的实现类 底层是由哈希表实…

区块链(Blockchain)调查研究(一)

文章目录 1. 区块链是什么&#xff1f;2. 区块链分类和特点3. 区块链核心关键技术3.1 共识机制3.2 密码学技术3.4 分布式存储3.5 智能合约 4. 区块链未来发展趋势5. 区块链能做什么、不能做什么&#xff1f;5.1 第一部分5.2 第二部分5.3 第三部分&#xff08;结论&#xff09; …

④-1单细胞学习-cellchat单数据代码补充版

目录 1&#xff0c;数据输入及处理 ①载入包和数据 ②CellChat输入数据准备 ③构建CellChat对象 ④数据预处理 2&#xff0c;细胞通讯预测 ①计算细胞通讯概率 ②提取配受体对细胞通讯结果表 ③提取信号通路水平的细胞通讯表 ④细胞互作关系可视化 1&#xff09;细胞…

java线程相关知识点

Java多线程涉及以下几个关键点 1.线程生命周期&#xff1a;理解线程从创建到销毁的各个阶段&#xff0c;包括新建、运行、阻塞、等待、计时等待和终止。 2.线程同步&#xff1a;掌握如何使用synchronized关键字和Lock接口来同步代码&#xff0c;防止数据竞争和死锁。 3.线程间通…

csrf与xss差别 别在弄乱了 直接靶场实操pikachu的csrf题 token绕过可以吗???

我们现在来说说这2个之间的关系&#xff0c;因为昨天的我也没有弄清楚这2者的关系&#xff0c;总感觉迷迷糊糊的。 xss这个漏洞是大家并不怎么陌生&#xff0c;导致xss漏洞的产生是服务器没有对用户提交数据过滤不严格&#xff0c;导致浏览器把用户输入的当作js代码返回客户端…

HCIA--NAT地址转换(复习)

先交换后路由&#xff1a; 1&#xff1a;在交换机上创建vlan&#xff0c;进入接口划分vlan&#xff0c;接着在交换机连接路由器的接口上建立trunk干道 2&#xff1a;在路由器上&#xff0c;先配置物理接口IP&#xff0c;接着在路由器上创建两个子接口&#xff0c;将建立的vla…

Fences 5 激活码 - 电脑桌面整理软件

提起桌面整理&#xff0c;经典老牌工具 Fences 必有一席之地&#xff0c;Stardock 发布了最新的 Fences 5 版本。 可以将文件和图标归类放入各个栅栏分区&#xff0c;并支持文件夹展开至桌面、分区置顶、淡化隐藏图标等功能&#xff0c;能让你的桌面焕然一新&#xff0c;不再混…

请求 响应

在web的前后端分离开发过程中&#xff0c;前端发送请求给后端&#xff0c;后端接收请求&#xff0c;响应数据给前端 请求 前端发送数据进行请求 简单参数 原始方式 在原始的web程序中&#xff0c;获取请求参数&#xff0c;需要通过HttpServletRequest 对象手动获取。 代码…

数据库四种隔离等级

持续更新以及完善中… 数据库事务隔离 首先&#xff0c;为什么要有事务隔离呢&#xff1f; 在单线程下&#xff0c;没什么大碍&#xff0c;但是我们想要提高效率&#xff0c;采用多线程并发时&#xff0c;便会出现一些问题。 **下面的问题一定要当作一个事务来看待&#xf…