android,Compose,消息列表和动画(点击item的时候,就会删除)
Compose,消息列表和动画(点击item的时候,就会删除)
package com.example.mycompose08import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import com.example.mycompose08.ui.theme.MyApplicationThemeimport androidx.compose.animation.*
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.*
import androidx.compose.material3.*
import androidx.compose.material3.Card
import androidx.compose.runtime.*
import androidx.compose.ui.*
import androidx.compose.ui.unit.*class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {MyApplicationTheme {// A surface container using the 'background' color from the themeSurface(modifier = Modifier.fillMaxSize(),color = MaterialTheme.colorScheme.background) {AnimatedList()}}}}
}// 定义一个可组合函数,用于显示一个列表
@Composable
fun AnimatedList() {// 创建一个状态变量,用于存储列表的数据val list = remember { mutableStateListOf("Apple", "Banana", "Cherry","先天下之优而优","后天下之乐而乐") }// 创建一个懒加载列表,用于显示列表的每一项LazyColumn(modifier = Modifier.fillMaxSize(),contentPadding = PaddingValues(16.dp)) {// 遍历列表的数据,为每一项创建一个可组合函数items(list) { item ->// 使用AnimatedVisibility函数,根据列表项是否可见来添加淡入淡出的动画效果AnimatedVisibility(visible = list.contains(item),enter = fadeIn(),exit = fadeOut()) {// 使用Card函数,创建一个卡片样式的列表项Card(modifier = Modifier.fillMaxWidth().padding(8.dp).clickable {// 点击卡片时,从列表中移除该项list.remove(item)},//elevation = 4.dp
// shadowElevation = 4.dp) {// 在卡片中显示列表项的文本内容Text(text = item,modifier = Modifier.padding(16.dp),fontSize = 24.sp)}}}}
}@Preview(showBackground = true)
@Composable
fun GreetingPreview() {MyApplicationTheme {AnimatedList()}
}


案例二:
package com.example.mycompose09 // 定义包名import android.os.Bundle // 导入Bundle类
import androidx.activity.ComponentActivity // 导入ComponentActivity类
import androidx.activity.compose.setContent // 导入setContent函数
import androidx.compose.foundation.Image // 导入Image可组合项
import androidx.compose.foundation.border // 导入border修饰符
import androidx.compose.foundation.clickable // 导入clickable修饰符
import androidx.compose.foundation.layout.Column // 导入Column可组合项
import androidx.compose.foundation.layout.Row // 导入Row可组合项
import androidx.compose.foundation.layout.Spacer // 导入Spacer可组合项
import androidx.compose.foundation.layout.fillMaxSize // 导入fillMaxSize修饰符
import androidx.compose.foundation.layout.height // 导入height修饰符
import androidx.compose.foundation.layout.padding // 导入padding修饰符
import androidx.compose.foundation.layout.size // 导入size修饰符
import androidx.compose.foundation.layout.width // 导入width修饰符
import androidx.compose.foundation.lazy.LazyColumn // 导入LazyColumn可组合项
import androidx.compose.foundation.shape.CircleShape // 导入CircleShape形状
import androidx.compose.material3.MaterialTheme // 导入MaterialTheme主题
import androidx.compose.material3.Surface // 导入Surface可组合项
import androidx.compose.material3.Text // 导入Text可组合项
import androidx.compose.runtime.Composable // 导入Composable注解
import androidx.compose.runtime.mutableStateOf // 导入mutableStateOf函数
import androidx.compose.runtime.remember // 导入remember函数
import androidx.compose.ui.Modifier // 导入Modifier类
import androidx.compose.ui.draw.clip // 导入clip修饰符
import androidx.compose.ui.res.painterResource // 导入painterResource函数
import androidx.compose.ui.tooling.preview.Preview // 导入Preview注解
import androidx.compose.ui.unit.dp // 导入dp单位
import com.example.mycompose09.ui.theme.MyApplicationTheme // 导入自定义主题// 下面是导入的其他库,用于实现更多功能
import androidx.compose.runtime.setValueimport androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.items
import androidx.compose.material.*
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateListOf
import androidx.compose.ui.*
import androidx.compose.ui.unit.*class MainActivity : ComponentActivity() {// 定义MainActivity类,继承自ComponentActivity类override fun onCreate(savedInstanceState: Bundle?) { // 重写onCreate方法,接收一个Bundle对象作为参数super.onCreate(savedInstanceState) // 调用父类的onCreate方法,并传递参数setContent { // 调用setContent函数,设置界面内容为一个可组合函数的lambda表达式MyApplicationTheme { // 调用自定义主题函数,应用主题样式到界面内容中// A surface container using the 'background' color from the themeSurface(// 设置Surface的修饰符为填充最大尺寸,即占满整个屏幕空间modifier = Modifier.fillMaxSize(),// 设置Surface的颜色为主题中定义的背景色color = MaterialTheme.colorScheme.background) {// Call the Conversation function here and pass a list of messages as a parameter.Conversation(messages = listOf( // 调用Conversation函数,并传递一个Message列表作为参数,显示一个对话界面。Message("Alice", "Hello, how are you?", R.drawable.p62, true),Message("Bob", "I'm fine, thank you. And you?", R.drawable.p19, false),Message("Alice", "I'm good too. What are you doing?", R.drawable.p2, true),Message("Bob", "Just learning Jetpack Compose. It's awesome!",R.drawable.p82,false)))}}}}
}// 定义一个数据类,表示一条消息,包含两个属性:作者和内容
data class Message(val author:String,val body:String,val imageId: Int, val isSent: Boolean)@Composable
fun MessageCard(msg: Message) {// 定义一个MessageCard函数,接收一个Message对象作为参数,用于显示一条消息的卡片// 创建一个状态变量,用于存储列表的数据val list = remember {// 调用remember函数,创建一个可变状态列表,并初始化为三个字符串mutableStateListOf("Apple", "Banana", "Cherry")}Row(modifier = Modifier.padding(all = 8.dp)) {// 调用Row函数,创建一个水平排列的容器,并设置修饰符为8dp的内边距Image(// 调用Image函数,创建一个图片组件painter = painterResource(msg.imageId),contentDescription = null,modifier = Modifier.size(40.dp).clip(CircleShape).border(1.5.dp, MaterialTheme.colorScheme.secondary, CircleShape))Spacer(modifier = Modifier.width(8.dp))var isExpanded by remember { mutableStateOf(false) }// We toggle the isExpanded variable when we click on this ColumnColumn(modifier = Modifier.clickable { isExpanded = !isExpanded }) {Text(text = msg.author,color = MaterialTheme.colorScheme.secondary,style = MaterialTheme.typography.labelSmall)Spacer(modifier = Modifier.height(4.dp))Surface(shape = MaterialTheme.shapes.medium,) {Text(text = msg.body,modifier = Modifier.padding(all = 4.dp),// If the message is expanded, we display all its content// otherwise we only display the first linemaxLines = if (isExpanded) Int.MAX_VALUE else 1,style = MaterialTheme.typography.bodyMedium)}}}
}@Composable
fun Conversation(messages: List<Message>) {LazyColumn {items(messages){// Call the MessageCard function here and pass each message as a parameter.MessageCard(msg = it)}}
}@Preview(showBackground = true)
@Composable
fun ConversationPreview() {val messages = listOf(Message("Alice", "Hello, how are you?", R.drawable.p62, true),Message("Bob", "I'm fine, thank you. And you?", R.drawable.p19, false),Message("Alice", "I'm good too. What are you doing?", R.drawable.p2, true),Message("Bob", "Just learning Jetpack Compose. It's awesome!",R.drawable.p82,false))Conversation(messages = messages)
}


相关文章:
android,Compose,消息列表和动画(点击item的时候,就会删除)
Compose,消息列表和动画(点击item的时候,就会删除) package com.example.mycompose08import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundat…...
go-admin 使用开发
在项目中使用redis 作为数据缓存:首先引入该包 “github.com/go-redis/redis/v8” client : redis.NewClient(&redis.Options{Addr: config.QueueConfig.Redis.Addr, // Redis 服务器地址Password: config.QueueConfig.Redis.Password, // Redis 密码&…...
力扣的板子
板子 线性筛法求质因子的板子快速幂 线性筛法求质因子的板子 int limit 100000; //修改为题目中的数字的上限 bool isprime[100005] {0}; //保存所有1~limit中的数字是不是质数 int myprime[100005] {0}; //保存2~limit中所有数字的最小质因子 int primes[100000] {0}; …...
基于Matlab实现路径规划算法(附上15个完整仿真源码)
路径规划是机器人技术中非常重要的一项任务,它涉及到机器人在复杂环境中的自主移动和避障能力。在本文中,我们将介绍利用多种算法实现路径规划的Matlab程序,包括模拟退火算法、RRT算法、PRM算法、聚类算法、potential算法、GA算法、fuzzy算法…...
纯跟踪(Pure Pursuit)路径跟踪算法研究(2)
纯跟踪(Pure Pursuit)路径跟踪算法研究(2) 下午进行了简单的公式推导,理论推导部分是没有问题的 下面的博客提供了在实车上用 GPS 实现纯跟踪控制的一些思路和注意点 Pure Pursuit(纯追踪算法)ROS实践 并不急于在实车…...
前后端分离------后端创建笔记(02)
本文章转载于【SpringBootVue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论,如有侵权请联系 源码:https://gitee.com/green_vegetables/x-admin-project.git 素材:https://pan.baidu.com/s/…...
Webpack5 Preload/Prefetch技术
文章目录 什么是Preload/Prefetch技术一、Preload:确保必需资源的快速获取二、Prefetch:预加载未来可能使用的资源三、使用注意事项四、Prefetch:总结 什么是Preload/Prefetch技术 在现代Web开发中,页面加载速度对于用户体验至关…...
PHP原生类
什么是php原生类 原生类就是php内置类,不用定义php自带的类,即不需要在当前脚本写出,但也可以实例化的类 我们可以通过脚本找一下php原生类 <?php $classes get_declared_classes(); foreach ($classes as $class) {$methods get_clas…...
QGIS3.28的二次开发八:显示shp的属性表
这里实现两个基本的 GIS 软件需求:矢量图层的属性表显示,以及根据属性筛选要素。 具体需求如下: 加载一个矢量图层并打开其属性表;输入筛选条件确认无误后,画布上和属性表中均只显示筛选后的要素。 QGIS 提供了若干…...
虚拟机安装 Ubuntu桌面版,宿主机无法访问虚拟机 ufw 防火墙简单使用
虚拟机安装 Ubuntu桌面版,宿主机无法访问虚拟机 问题处理安装ssh服务ufw防火墙 放行ssh服务ufw 常用命令 问题 本次安装使用的 ubuntu-22.04.2-desktop-amd64 ,网络连接使用的是桥接,查看ubuntu的ip是正常的,与宿主机在同一个网段…...
jquery发送ajax练习
jquery发送ajax练习 工具代码运行结果 工具 HBuilder X 代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>通过ajax进行图片的提取和显示</title><style>div{background-color: beige;color: red;font-s…...
adb用法,安卓的用户CA证书放到系统CA证书下
设备需root!!设备需root!!设备需root!! 测试环境:redmi 5 plus、miui10 9.9.2dev(安卓8.1)、已root win下安装手机USB驱动(过程略,…...
【LVS-NAT配置】
配置 node1:128(客户端) node2:135(调度器) RS: node3:130 node4:132 node2添加网络适配器(仅主机模式) [rootnode2 ~]# nmtui[rootnode2 ~]#…...
时序预测 | MATLAB实现BO-GRU贝叶斯优化门控循环单元时间序列预测
时序预测 | MATLAB实现BO-GRU贝叶斯优化门控循环单元时间序列预测 目录 时序预测 | MATLAB实现BO-GRU贝叶斯优化门控循环单元时间序列预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-GRU贝叶斯优化门控循环单元时间序列预测。基于贝叶斯(bayes)…...
注意:阿里云服务器随机分配可用区说明
阿里云服务器如有ICP备案需求请勿选择随机可用区,因为当前地域下的可用区可能不支持备案,阿里云百科分享提醒大家,如果你的购买的云服务器搭建网站应用,网站域名需要使用这台云服务器备案的话,不要随机分配可用区&…...
【Vue】使用print.js插件实现打印预览功能,超简单
目录 一、实现效果 二、实现步骤 【1】安装插件 【2】在需要打印的页面导入 【3】在vue文件中需要打印的部分外层套一层div,给div设置id。作为打印的区域 【4】在打印按钮上添加打印事件 【5】在methods中添加点击事件 三、完整代码 一、实现效果 二、实现步…...
3.5 Spring MVC参数传递
Spring MVC的Controller接收请求参数的方式有多种,本节主要介绍Spring MVC下的HttpServletRequest、基本数据类型、Java Bean、数组、List、Map、JSON参数传递方式,同时解决POST请求中文乱码问题。 1. HttpServletRequest参数传递 Controller RequestM…...
linux程序保护机制gcc编译选项
预备知识: 计算机内存的结构通常包括以下几个主要部分: 1.代码段(Code Segment):也称为文本段,存储程序的可执行指令。代码段是被标记为可执行的,程序从代码段中获取指令并执行。 2.数据段(Data Segment):…...
指针与引用:C语言中的内存魔法
开始本篇文章之前先推荐一个好用的学习工具,AIRIght,借助于AI助手工具,学习事半功倍。欢迎访问:http://airight.fun/。 也把我学习过程中搜集的资料分享给大家,希望可以帮助大家少走弯路,链接:h…...
docker desktop搭建 nginx
【docker 桌面版】windows 使用 docker 搭建 nginx 拉取 nginx 镜像 docker pull nginx运行容器 docker run -d -p 80:8081 --name nginx nginx本地磁盘创建 nginx 目录 D:\DockerRep\nginx复制 docker 中的 nginx 配置文件 查看运行的容器 docker ps -a docker cp 9f0f82d66dd…...
别再一上来就关SELinux了!搞懂Permissive、Enforcing、Disabled三种模式,让你的Linux服务器更安全
别再一上来就关SELinux了!搞懂Permissive、Enforcing、Disabled三种模式,让你的Linux服务器更安全 第一次在服务器上部署Web应用时,我遇到了一个诡异的权限问题:Nginx明明以root身份运行,却无法读取我新上传的静态文件…...
AMGTA就增材制造在资源高效型制造体系中的作用发布独立报告
电子、信息和通信领域获奖者:Cynthia Dwork博士 生命科学领域获奖者:Akira Shizuo博士和Zhijian “James” Chen博士 日本奖基金会(会长:Ryozo Nagai)于4月14日(周二)在东京涩谷区的东京新国立剧…...
NVIDIA Profile Inspector终极指南:解锁显卡隐藏性能的5个技巧
NVIDIA Profile Inspector终极指南:解锁显卡隐藏性能的5个技巧 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector NVIDIA Profile Inspector是一款强大的NVIDIA显卡配置工具,能够深…...
JDBC事务管理:确保数据一致性的关键技术
JDBC事务管理:确保数据一致性的关键技术 在Java编程的世界里,JDBC(Java Database Connectivity)作为连接Java应用程序与各种关系型数据库的桥梁,扮演着至关重要的角色。它提供了一套标准的API,使得开发者能…...
从零开始:30分钟搭建AI驱动的自动化测试平台Testsigma
从零开始:30分钟搭建AI驱动的自动化测试平台Testsigma 【免费下载链接】testsigma Testsigma is an agentic test automation platform powered by AI-coworkers that work alongside QA teams to simplify testing, accelerate releases and improve quality acros…...
【GPU存储架构与CUDA编程实战】从寄存器到显存:性能调优的存储层次全景解析
1. GPU存储架构全景解析:从寄存器到显存的性能金字塔 第一次接触CUDA编程时,我对着kernel函数里各种内存修饰符发懵——shared、__constant__这些下划线开头的关键字到底有什么区别?直到亲眼看到把变量从寄存器挪到共享内存后,计算…...
CTF系列--WP--靶机16--flick
WP Flick 1(1).pdfhttps://www.yuque.com/attachments/yuque/0/2026/pdf/64604138/1774599785497-5449f6c0-7b7a-42cf-b308-9694ce33c363.pdf 此WP中我只看懂了部分,小白新手可以看笔者的,若是大佬们感觉我写的过于简单,可以去看这个WP。同时…...
PyCharm里用pip装Seaborn总失败?试试这3种更稳的安装方式(含Anaconda对比)
PyCharm里用pip装Seaborn总失败?试试这3种更稳的安装方式(含Anaconda对比) 每次在PyCharm里用pip安装Seaborn时,你是不是也经常遇到各种莫名其妙的报错?网络超时、依赖冲突、版本不兼容...这些问题困扰着无数数据分析开…...
不只是约球:运动搭子AI如何通过“胜率匹配”找到旗鼓相当的对手?
运动搭子(深圳)科技有限公司(2026年成立于深圳,官网www.yundongdazi.com),以小程序为核心打造一站式全场景运动生态平台,覆盖18-45岁各类运动人群,现有22万客户,搭载运动…...
深入解析ToTensor():从PIL到OpenCV的图像预处理最佳实践
1. ToTensor()的隐藏技能:不只是格式转换 很多人第一次看到ToTensor()这个函数名时,都会以为它只是简单地把图像数据转换成PyTorch的Tensor格式。但当我深入研究源码后才发现,这个函数背后藏着不少容易被忽略的重要细节。让我用一个实际项目中…...
