当前位置: 首页 > news >正文

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}")}}}

结果
在这里插入图片描述

相关文章:

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

1 去掉超出滑动区域时的拖拽的阴影 即 overScrollMode 代码如下 CompositionLocalProvider(LocalOverscrollConfiguration provides null) {LazyColumn() {items(list, key {list.indexOf(it)}){Row(Modifier.animateItemPlacement(tween(durationMillis 250))) {Text(text…...

Wireshark 如何查找包含特定数据的数据帧

1、查找包含特定 string 的数据帧 使用如下指令: 双引号中所要查找的字符串 frame contains "xxx" 查找字符串 “heartbeat” 示例: 2、查找包含特定16进制的数据帧 使用如下指令: TCP:在TCP流中查找 tcp contai…...

【深度学习入门篇一】阿里云服务器(不需要配环境直接上手跟学代码)

前言 博主刚刚开始学深度学习,配环境配的心力交瘁,一塌糊涂,不想配环境的刚入门的同伴们可以直接选择阿里云服务器 阿里云天池实验室,在入门阶段跑个小项目完全没有问题,不要自己傻傻的在那配环境配了半天还不匹配&a…...

app,waf笔记

API攻防 知识点: 1、HTTP接口类-测评 2、RPC类接口-测评 3、Web Service类-测评 内容点: SOAP(Simple Object Access Protocol)简单对象访问协议是交换数据的一种协议规范,是一种轻量级的、简单的、基于XML&#…...

数据仓库之维度建模

维度建模(Dimensional Modeling)是一种用于数据仓库设计的方法,旨在优化查询性能并提高数据的可读性。它通过组织数据为事实表和维度表的形式,提供直观的、易于理解的数据模型,使业务用户能够轻松地进行数据分析和查询…...

解决远程服务器连接报错

最近使用服务器进行数据库连接和使用的时候出现了一个报错: Error response from daemon: Conflict. The container name “/mysql” is already in use by container “1bd3733123219372ea7c9377913da661bb621156d518b0306df93cdcceabb8c4”. You have to remove …...

通过电脑查看Wi-Fi密码的方法,提供三种方式

式一: 右击桌面右下角的网络图标,依次选择【网络和Internet设置】、【WLAN】、【网络和共享中心】。点击已连接的无线网络。依次点击【无线属性】、【安全】,勾选下方【显示字符】即可。 方式二: 在开始菜单输入“cmd”进入命令…...

Nvidia 目前的市值为 3.01 万亿美元,超过苹果Apple

人工智能的繁荣将英伟达的市值推高到足以使其成为全球第二大最有价值的公司。 英伟达已成为全球第二大最有价值的公司。周三下午,这家芯片制造巨头的市值达到 3.01 万亿美元,领先于苹果公司的 3 万亿美元。 喜好儿网AIGC专区:https://heehe…...

用langchain搭配最新模型ollama打造属于自己的gpt

langchain 前段时间去玩了一下langchain,熟悉了一下大模型的基本概念,使用等。前段时间meta的ollama模型发布了3.0,感觉还是比较强大的,在了解过后,自己去用前后端代码,调用ollama模型搭建了一个本地的gpt应用。 核心逻辑 开始搭…...

工业互联网基本概念及关键技术(295页PPT)

资料介绍: 工业互联网的核心是通过工业互联网平台把设备、生产线、工厂、供应商、产品和客户紧密地连接融合起来。这种连接能够形成跨设备、跨系统、跨厂区、跨地区的互联互通,从而提高效率,推动整个制造服务体系智能化。同时,工…...

Python pandas openpyxl excel合并单元格,设置边框,背景色

Python pandas openpyxl excel合并单元格,设置边框,背景色 1. 效果图2. 源码参考 1. 效果图 pandas设置单元格背景色,字体颜色,边框 openpyxl合并单元格,设置丰富的字体 2. 源码 # excel数字与列名互转 import o…...

【vue3|第7期】 toRefs 与 toRef 的深入剖析

日期:2024年6月6日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方&#xff…...

git代码冲突处理软件P4Merge

文章目录 1. 下载安装2. 配置脚本参考链接 1. 下载安装 下载地址:https://www.perforce.com/downloads/helix-visual-client-p4v 下载教程:http://blog.csdn.net/wirelessqa/article/details/9035215 这里下载之前需要注册。 2. 配置脚本 编写一个全局…...

Unity物体材质属性Offset动态偏移

Unity物体材质属性Offset动态偏移 MeshRenderer mr;float offset;public float scrollSpeed 0.5F;private void Start(){mr GetComponent<MeshRenderer>();}void Update(){offset -Time.time * scrollSpeed;mr.material.mainTextureOffset new Vector2(0, -offset);}…...

【数据结构】筛选法建堆

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…...

DevExpress Installed

一、What’s Installed 统一安装程序将DevExpress控件和库注册到Visual Studio中&#xff0c;并安装DevExpress实用工具、演示应用程序和IDE插件。 Visual Studio工具箱中的DevExpress控件 Visual Studio中的DevExpress菜单 Demo Applications 演示应用程序 Launch the Demo…...

解决QT QMessageBox 弹出需点击两次才能关闭问题

放个链接不迷路&#xff1a;添加链接描述...

Milvus--向量数据库

Milvus 是一个开源的向量数据库&#xff0c;专为高维向量数据的存储、查询和检索而设计。它支持多种类型的向量数据&#xff0c;如浮点数向量、整数向量等&#xff0c;并且提供了强大的向量相似度计算功能。Milvus采用分布式架构&#xff0c;可以轻松地扩展到大规模数据集&…...

php质量工具系列之PHPCPD

PHPCPD 用于检测重复代码&#xff0c;直观的说就是复制粘贴再稍微改改 该工具作者已经 停止维护 安装 composer global require --dev sebastian/phpcpd执行 phpcpd --log-pmd phpcpd_result.xml ./app参数介绍 --log-pmd 将结果保存在phpcpd_result.xml 中 ./app 是phpcpd扫…...

Android14 WMS-窗口绘制之relayoutWindow流程(二)-Server端

本文接着如下文章往下讲 Android14 WMS-窗口绘制之relayoutWindow流程(一)-Client端-CSDN博客 然后就到了Server端WMS的核心实现方法relayoutWindow里 WindowManagerService.java - OpenGrok cross reference for /frameworks/base/services/core/java/com/android/server…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...

热烈祝贺埃文科技正式加入可信数据空间发展联盟

2025年4月29日&#xff0c;在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上&#xff0c;可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞&#xff0c;强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...