Compose笔记(二十一)--AnimationVisibility
这一节主要了解一下Compose的AnimationVisibility,AnimatedVisibility 是 Jetpack Compose 里用于实现组件可见性动画效果的组件,借助它能让组件在显示和隐藏时带有平滑的过渡动画,从而提升用户体验。现总结如下:
API
1. visible
含义:这是一个布尔类型的参数,用于控制组件的可见性。当 visible为true时,组件会显示;当visible为false时,组件会隐藏。
作用:它是控制组件显示与隐藏的核心参数,配合动画效果可以实现平滑的过渡。
2. enter
含义:指定组件进入(显示)时的动画效果。enter参数接收一个EnterTransition类型的值,Compose提供了多种内置的进入动画,如fadeIn()、slideInHorizontally()等,也可以自定义进入动画。
作用:让组件在显示时带有动画效果,增强界面的动态感和视觉效果。
3. exit
含义:指定组件退出(隐藏)时的动画效果。exit参数接收一个ExitTransition 类型的值,Compose提供了多种内置的退出动画,如fadeOut()、slideOutHorizontally()等,也可以自定义退出动画。
作用:让组件在隐藏时带有动画效果,使界面的变化更加平滑自然。
4. initiallyVisible
含义:这是一个布尔类型的可选参数,用于设置组件的初始可见性。默认值为true,即组件在初始状态下是可见的。
作用:方便在组件首次显示时就设置其可见性,结合动画效果可以实现更丰富的界面展示。
5. content
含义:它是一个@Composable函数,用于定义要显示或隐藏的组件内容。
作用:将需要进行可见性动画的组件包裹在content函数中,以便应用动画效果。
常见动画类型:
1. 淡入动画(fadeIn)
让组件在显示时从透明逐渐变为不透明,实现淡入效果。
2 淡出动画(fadeOut)
让组件在隐藏时从不透明逐渐变为透明,实现淡出效果。
3 滑入动画(slideIn)
slideInHorizontally:使组件从水平方向滑入屏幕。
4 滑出动画(slideOut)
slideOutHorizontally:使组件从水平方向滑出屏幕。
5. 缩放进入动画(scaleIn)
让组件在显示时从较小的尺寸逐渐放大到正常尺寸。
6. 缩放退出动画(scaleOut)
让组件在隐藏时从正常尺寸逐渐缩小。
栗子:
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.core.tween
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.animation.slideInHorizontally
import androidx.compose.animation.slideOutHorizontally
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Button
import androidx.compose.material3.Card
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp@Composable
fun TestAnimatedVisibilityOne() {var isCardVisible by remember { mutableStateOf(false) }var isTextVisible by remember { mutableStateOf(false) }Column(modifier = Modifier.fillMaxSize(),verticalArrangement = Arrangement.Center,horizontalAlignment = Alignment.CenterHorizontally) {Row(modifier = Modifier.fillMaxWidth(),horizontalArrangement = Arrangement.SpaceEvenly) {Button(onClick = { isCardVisible = !isCardVisible }) {Text(text = if (isCardVisible) "隐藏卡片" else "显示卡片")}Button(onClick = { isTextVisible = !isTextVisible }) {Text(text = if (isTextVisible) "隐藏文本" else "显示文本")}}Spacer(modifier = Modifier.height(20.dp))AnimatedVisibility(visible = isCardVisible,enter = slideInHorizontally(initialOffsetX = { -it },animationSpec = tween(durationMillis = 500)) + fadeIn(animationSpec = tween(durationMillis = 500)),exit = slideOutHorizontally(targetOffsetX = { -it },animationSpec = tween(durationMillis = 500)) + fadeOut(animationSpec = tween(durationMillis = 500))) {Card(modifier = Modifier.fillMaxWidth().padding(16.dp)) {Text(text = "这是一个卡片组件",modifier = Modifier.padding(16.dp))}}Spacer(modifier = Modifier.height(20.dp))AnimatedVisibility(visible = isTextVisible,enter = slideInHorizontally(initialOffsetX = { it },animationSpec = tween(durationMillis = 500)) + fadeIn(animationSpec = tween(durationMillis = 500)),exit = slideOutHorizontally(targetOffsetX = { it },animationSpec = tween(durationMillis = 500)) + fadeOut(animationSpec = tween(durationMillis = 500))) {Box(modifier = Modifier.fillMaxWidth().padding(16.dp),contentAlignment = Alignment.Center) {Text(text = "这是一个文本组件")}}}
}
分析:主要演示当点击按钮时,卡片和文本会以不同的动画效果显示或隐藏。
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.expandVertically
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.animation.shrinkVertically
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.material3.Button
import androidx.compose.material3.Card
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateListOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp@Composable
fun TestAnimatedVisibility() {val items = remember {mutableStateListOf("Item 1", "Item 2", "Item 3", "Item 4", "Item 5")}val expandedIndices = remember { mutableStateListOf<Int>() }LazyColumn(modifier = Modifier.fillMaxSize(),verticalArrangement = Arrangement.spacedBy(16.dp),contentPadding = androidx.compose.foundation.layout.PaddingValues(16.dp)) {itemsIndexed(items) { index, item ->Card(modifier = Modifier.fillMaxWidth()) {Column(modifier = Modifier.padding(16.dp)) {Button(onClick = {if (expandedIndices.contains(index)) {expandedIndices.remove(index)} else {expandedIndices.add(index)}},modifier = Modifier.fillMaxWidth()) {Text(text = item)}AnimatedVisibility(visible = expandedIndices.contains(index),enter = expandVertically(expandFrom = Alignment.Top) + fadeIn(initialAlpha = 0.3f),exit = shrinkVertically() + fadeOut()) {Text(text = "这是 $item 的详细信息",modifier = Modifier.padding(top = 8.dp))}}}}}
}
分析: AnimatedVisibility 与列表结合使用。当点击列表项时,该项的详细信息会以动画形式展开或收缩。
注意:
1 状态管理不当引发的问题,如果没有正确管理 AnimatedVisibility 的可见性状态,可能会出现动画不按预期执行,或者在重组时状态丢失的情况。
2 动画配置冲突 当组合多个动画时,如果动画的配置相互冲突,可能会导致动画效果不符合预期,甚至出现卡顿现象。
3 动画完成回调缺失,AnimatedVisibility 本身没有直接提供动画完成的回调,若需要在动画完成后执行特定操作,会比较麻烦,可以借助 LaunchedEffect 和 AnimatedVisibilityState 来监听动画的完成状态。
源码:
@Composable
fun AnimatedVisibility(visible: Boolean,modifier: Modifier = Modifier,enter: EnterTransition = fadeIn() + expandVertically(),exit: ExitTransition = shrinkVertically() + fadeOut(),initiallyVisible: Boolean = true,content: @Composable () -> Unit
) {// 管理可见性状态val visibilityState = rememberAnimatedVisibilityState(initiallyVisible = initiallyVisible,visible = visible)// 应用动画AnimatedVisibilityImpl(visibilityState = visibilityState,modifier = modifier,enter = enter,exit = exit,content = content)
}
分析:
visible:控制组件的可见性。
enter和exit:分别指定进入和退出动画。
initiallyVisible:设置组件的初始可见性。
content:要显示或隐藏的组件内容。
调用rememberAnimatedVisibilityState函数创建并管理可见性状态。
调用AnimatedVisibilityImpl 函数应用动画。
@Composable
fun rememberAnimatedVisibilityState(initiallyVisible: Boolean,visible: Boolean
): AnimatedVisibilityState {val state = remember { AnimatedVisibilityState(initiallyVisible) }LaunchedEffect(visible) {if (visible) {state.show()} else {state.hide()}}return state
}
分析:
使用 remember 函数创建并存储 AnimatedVisibilityState 实例。
通过 LaunchedEffect监听visible参数的变化,当visible改变时,调用state.show()或state.hide()方法触发动画。
class AnimatedVisibilityState(initiallyVisible: Boolean) {var targetVisibility by mutableStateOf(initiallyVisible)var isVisible: Booleanget() = targetVisibility || isAnimationRunningprivate set(_) {}var isAnimationRunning by mutableStateOf(false)suspend fun show() {if (targetVisibility) returntargetVisibility = trueisAnimationRunning = truetry {// 执行进入动画// 这里会根据具体的 EnterTransition 执行动画逻辑} finally {isAnimationRunning = false}}suspend fun hide() {if (!targetVisibility) returntargetVisibility = falseisAnimationRunning = truetry {// 执行退出动画// 这里会根据具体的 ExitTransition 执行动画逻辑} finally {isAnimationRunning = false}}
}
分析:
targetVisibility:存储目标可见性状态。
isVisible:表示组件当前是否可见,考虑了动画执行状态。
isAnimationRunning:记录动画是否正在执行。
show()和hide()方法:分别触发进入和退出动画,在动画执行期间将isAnimationRunning设置为true,动画结束后设置为false。
AnimatedVisibilityImpl 函数
@Composable
private fun AnimatedVisibilityImpl(visibilityState: AnimatedVisibilityState,modifier: Modifier,enter: EnterTransition,exit: ExitTransition,content: @Composable () -> Unit
) {if (visibilityState.isVisible) {// 根据动画状态应用过渡效果val transition = updateTransition(visibilityState.targetVisibility, label = "AnimatedVisibility")val enterFraction = transition.animateFloat(transitionSpec = { enter.animationSpec },label = "EnterFraction") { targetVisible ->if (targetVisible) 1f else 0f}.valueval exitFraction = transition.animateFloat(transitionSpec = { exit.animationSpec },label = "ExitFraction") { targetVisible ->if (targetVisible) 0f else 1f}.value// 根据动画进度应用修饰符val animatedModifier = modifier.then(enter.createModifier(enterFraction)).then(exit.createModifier(exitFraction))// 显示组件内容Box(animatedModifier) {content()}}
}
分析:
若visibilityState.isVisible为true,则创建 updateTransition来管理动画过渡。
分别计算进入和退出动画的进度enterFraction和exitFraction。
根据动画进度应用enter和 exit 动画的修饰符。
使用Box组件包裹content,并应用动画修饰符。
简而言之,AnimatedVisibility 的源码核心在于状态管理和动画调度。通过 AnimatedVisibilityState管理可见性状态和动画执行状态,利用updateTransition实现动画过渡,最终根据动画进度动态调整组件的属性,实现平滑的可见性动画效果。
相关文章:
Compose笔记(二十一)--AnimationVisibility
这一节主要了解一下Compose的AnimationVisibility,AnimatedVisibility 是 Jetpack Compose 里用于实现组件可见性动画效果的组件,借助它能让组件在显示和隐藏时带有平滑的过渡动画,从而提升用户体验。现总结如下: API 1. visible 含义:这是一…...
生物化学笔记:神经生物学概论05 感受野 视觉中枢 高级视皮层中的信息走向
信息传递中的“击鼓传花” 新特性的突现 功能柱:简化节点 高级视皮层中的信息走向...
记录idea可以运行但是maven install打包却找不到问题
解决idea使⽤maven多模块install报依赖模块的包找不到的问题 如果被依赖项⽬是springboot项⽬,那么可以把相关的springboot的东西移除掉,改造成普通项⽬。如果不想改造项⽬,那就添加部分的配置,因为springboot项⽬打包的时候会⽣…...
牛客:AB5 点击消除
链接:点击消除_牛客题霸_牛客网 题解: 利用栈,遍历输入的字符串,栈为空则入栈,栈不为空则去除栈顶字符和当前遍历到的字符比较,相等则栈顶字符出栈,当前遍历的字符也不入栈,不相等…...
vue3 动态修改系统title
vue3 动态修改系统title 修改前 修改后 1、封装 useTitle 工具函数 创建组合式 API,通过 watchEffect 监听标题变化: // composables/useTitle.js import { ref, watchEffect } from vue;export function useTitle(initialTitle) {const title r…...
产品经理.产品设计.产品设计工具
一、 产品经理常用工具 1. 业务流程图---系统流程图 业务流程图,面向用户调研,描述业务的流转和数据的处理要求,跟用户和业务方确认;---业务角色的泳道流程图。 系统流程图,面向产品需求设计, prd系描述各…...
kibana重建es索引
kibana如何重命名es索引名 背景 在初期设计es索引文档的时候考虑不是很周全,会多出很多无效字段。如果不删除或禁用对后续数据增量以及文档维护会有不良影响。 技术实现 使用 _reindex 1.执行Reindex # 复制旧索引数据到新索引 POST _reindex {"source&qu…...
windows系统常用快捷键(CMD常用命令,DOS常用命令)
Windows系统常用快捷键 Win E: 打开“文件资源管理器”(我的电脑)。Win S: 打开“搜索”功能,可以搜索文件、应用、设置等。Win I: 打开“设置”菜单,用于调整系统设置。Win X: 打开“快速链接”菜单,包含电源选项…...
使用 ossutil 上传文件到阿里云 OSS
在处理文件存储和传输时,阿里云的对象存储服务(OSS)是一个非常方便的选择。特别是在需要批量上传文件或通过命令行工具进行文件管理时,ossutil提供了强大的功能。本文将详细说明如何使用 ossutil 上传文件到阿里云 OSS,…...
专家访谈:从文本到视频,GEO多模态优化的实战法则
提问者:什么是生成引擎优化(GEO)?它与传统SEO的核心差异是什么? 源易GEO专家:生成引擎优化(GEO)是一种新兴策略,旨在提升内容在生成式AI引擎(如DeepSeek、…...
7.计算机网络相关术语
7. 计算机网络相关术语 ACK (Acknowledgement) 确认 ADSL (Asymmetric Digital Subscriber Line) 非对称数字用户线 AP (Access Point) 接入点 AP (Application) 应用程序 API (Application Programming Interface) 应用编程接口 APNIC (Asia Pacific Network Informatio…...
openEuler 22.03 安装 Redis 6.2.9,支持离线安装
目录 一、环境检查1.1 必要环境检查1.2 在线安装(有网络)1.3 离线安装(无网络) 二、下载Redis2.1 在线下载2.2 离线下载 三、安装Redis四、配置Redis服务五、开机自启服务六、开放防火墙端口七、常用命令 一、环境检查 1.1 必要环…...
Java架构师深度技术面试:从核心基础到分布式架构全解析
一场关于互联网大厂Java求职者的深度技术面试 在当今竞争激烈的互联网行业中,作为一名Java程序员,如何在众多候选人中脱颖而出显得尤为重要。本文通过一个完整的面试故事场景,以严肃的面试官和经验丰富的Java架构师马架构之间的问答形式&…...
你的项目有‘哇‘点吗?
你的项目有哇点吗? 刷了一下午招聘软件,发现没?大厂JD里总爱写有创新力者优先——可你们的简历,创新力还不如食堂菜单! 程序员写项目最大的误区:把创新当彩蛋藏最后!什么参与需求评审负责模块…...
RPG3.角色输入
流程: 需要创建原生的标签。 需要创建输入配置数据资产,通过这个资产,将标签映射到角色的唯一动作,通过输入的文本来识别应该做哪一个动作。需要创建自定义的输入组件。 需要绑定输入,创建不同的输入回调。 需要在…...
【python】-基础语法3
💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法🎄 如 果 你 …...
毕业论文 | 传统特征点提取算法与匹配算法对比分析
传统特征点提取算法与匹配算法对比分析 一、特征点提取算法对比二、特征匹配算法对比三、核心算法原理与公式1. **Harris角点检测**2. **SIFT描述子生成**3. **ORB描述子**四、完整Matlab代码示例1. **Harris角点检测与匹配**2. **SIFT特征匹配(需VLFeat库)**3. **ORB特征匹配…...
TM1668芯片学习心得三
一、键扫数据储存地址如下所示,先发读键命令后,开始读取按键数据BYTE1-BYTE5字节,读数据从低位开始输出,其中B6和B7位为无效位,此时芯片输出为0。芯片K和KS引脚对应的按键按下时,相对应的字节内的 BIT位为1…...
精益数据分析(34/126):深挖电商运营关键要点与指标
精益数据分析(34/126):深挖电商运营关键要点与指标 在创业和数据分析的学习之旅中,我们都在不断探寻如何让业务更上一层楼。今天,我依旧带着和大家共同进步的想法,深入解读《精益数据分析》中电商运营的关…...
Dify 获取天气数据并以echarts图表显示
Dify 获取天气数据并以echarts图表显示 1. 创建一个 Chatflow2. 创建一个 HTTP 请求节点3. 创建一个代码执行节点4. 创建一个直接回复节点5. 发布并预览 1. 创建一个 Chatflow 2. 创建一个 HTTP 请求节点 请求地址:https://weather.cma.cn/api/climate?stationid5…...
vtk 读取ply或者stl点云进行ICP配准(不可直接使用vtkPolyData)
在vtk中,读取ply或stl文件使用ICP进行点云配准时,需要注意不要直接使用vtkPolyData进行配准,这种方式会报错。 vtkPLYReader读取的文件可能仅包含点数据,而没有显式的顶点定义。例如,PLY文件可能只列出点的坐标&#x…...
ArrayList的特点及应用场景
ArrayList的特点及应用场景 一、ArrayList核心特点 基于动态数组实现 底层使用Object[]数组存储元素 默认初始容量为10 扩容机制:每次扩容为原来的1.5倍(int newCapacity oldCapacity (oldCapacity >> 1)) 快速随机访问 实现了R…...
【QT】编写第一个 QT 程序 对象树 Qt 编程事项 内存泄露问题
目录 1. 编写第一个 QT 程序 1.1 使用 标签 实现 1.2 纯代码形式实现 1.3 使用 按钮 实现 1.3.1 图形化界面实现 1.3.2 纯代码形式实现 1.4 使用 编辑框 实现 1.4.1 图形化界面实现 1.4.2 纯代码形式实现 1.4.3 内存泄露 2. 认识对象模型(对象树&…...
92.一个简单的输入与显示示例 Maui例子 C#例子
一、关于项目命名的注意事项 在开发.NET MAUI项目时,项目命名是一个不可忽视的细节。如果你习惯了在C#控制台或WPF项目中使用中文项目名称,那么在.NET MAUI中,你可能会遇到一些问题。我之前就因为使用中文项目名称而导致项目无法直接运行&am…...
SpringAI实现AI应用-搭建知识库
SpringAI实战链接 1.SpringAl实现AI应用-快速搭建-CSDN博客 2.SpringAI实现AI应用-搭建知识库-CSDN博客 概述 想要使用SpringAI搭建知识库,就要使用SpringAI中的TikaDocumentReader,它属于ETL(提取、转换、加载)框架中的提取&…...
大连理工大学选修课——机器学习笔记(4):NBM的原理及应用
NBM的原理及应用 贝叶斯决策及相关 贝叶斯决策 对于给定数据集 X [ X 1 , X 2 , ⋯ , X d ] T X[X_1,X_2,\cdots,X_d]^T X[X1,X2,⋯,Xd]TK个类 C i , i 1 , ⋯ , K C_i,i1,\cdots,K Ci,i1,⋯,K, 满足 P ( C i ) > 0 a n d ∑ P ( C i ) 1 P(C_i)>0\ and\ …...
SQL Server 数据库重命名
通过将 SQL Server 数据库置于单用户模式,对其重命名 使用下列步骤在 SSMS 中使用 T-SQL 重命名 SQL Server 数据库。 1.为实例连接到 master 数据库。 2.打开一个查询窗口。 3.将以下示例复制并粘贴到查询窗口中,然后选择“执行”。 此示例将 MyTes…...
5W1H分析法——AI与思维模型【86】
一、定义 5W1H分析法思维模型是一种通过对问题或事件从原因(Why)、对象(What)、地点(Where)、时间(When)、人员(Who)和方法(How)六个…...
【closerAI ComfyUI】开源社区炸锅!comfyUI原生支持Step1X-Edit 图像编辑!离简单免费高效又进一步
添加图片注释,不超过 140 字(可选) 更多AI前沿科技资讯,请关注我们: closerAI-一个深入探索前沿人工智能与AIGC领域的资讯平台 【closerAI ComfyUI】开源社区炸锅!comfyUI原生支持Step1X-Edit 图像编辑!离简单免费高效又进一步! 大家好,我是Jimmy。前面有介绍了阶跃…...
spring中关键字Assert和jdk的assert关键字
你提出的问题非常关键,涉及到 Java 中两种不同的 assert 用法: ✅ 一、你提到的两种 assert 类型 示例 来源 特点 JDK 自带的 assert 关键字 assert str ! null; Java 原生语言特性(JDK 1.4) 可开关控制&#…...
git分支分叉强制更改为线性
git分支分叉更改为线性 远端分支情况 本地分支情况 在执行 git pull origin main 时遇到了一个提示,说明本地分支和远程分支发生了分歧(divergent branches)。 这通常是因为远程分支上有新的提交,而本地分支也有未推送的提交&a…...
从实列中学习linux shell6: 写一个 shell 脚本 过滤 恶意ip 攻击
下面是检测和过滤恶意IP攻击的Shell脚本,包含自动分析日志、封锁IP、白名单管理等功能: 第一步:过滤脚本 #!/bin/bash# 配置区域(根据需求修改) LOG_FILES(/var/log/auth.log /var/log/nginx/access.log) # 监控的日…...
代码随想录打卡|Day31动态规划(最后一块石头的重量2、目标和、一和零)
动态规划Part 04 最后一块石头的重量 II 力扣题目链接 代码随想录链接 视频讲解链接 题目描述: 有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合,从中选出任意两块石头,然后将它们一起粉…...
一区思路!挑战5天一篇NHANES预测模型 DAY1-5
挑战5天一篇预测模型NHANES Day1! 近期美国关闭seer数据库的信息在互联网上广泛传播,大家都在担心数据库挖掘是否还能做。这个问题其实是有答案的,数据库挖掘肯定能做,做没被关的数据库即可,同时留意一些国产数据库~…...
Stack--Queue 栈和队列
一、Stack--栈 1.1 什么是栈? 堆栈是一种容器适配器,专门设计用于在 LIFO 上下文(后进先出)中运行,其中元素仅从容器的一端插入和提取。 第一个模版参数T:元素的类型;第二个模版参数Container…...
Redis热key大key详解
不要阻挡我走向成功,勇者配享所有,感想敢干 hotkey热key 大量请求可能会使redis节点流量不均匀,进而导致宕机,继而打到数据库崩溃;因此需要对热key优化 引发问题: 分片服务瘫痪可能打到数据库࿰…...
软件架构选型之“如何选”
本文提出的多维度评估框架旨在建立客观、全面的架构选型方法论,帮助团队做出更科学的架构决策,通过业务需求、技术约束、组织能力和演进策略四个核心维度建立量化评估模型。该框架旨在解决移动应用架构决策中的主观性和片面性问题,提供系统化…...
C语言写文件模式错误
“w” 和“wb”区别 出错实例 图像.raw文件输出时,采用“w”模式打开写文件,会将值为0A (即\n的ASCII值),前自动添加0D(即\r的ASCII值),如下图所示...
2025最新福昕PDF编辑器,PDF万能处理工具
软件介绍 Foxit PDF Editor Pro 2025 中文特别版(以前称为 Foxit PhantomPDF Business)是一款专为满足各种办公需求而设计的业务就绪的PDF工具包。 软件特点 1. 强大的PDF编辑能力 创建新文档:用户可以从无到有地构建PDF文档,添…...
Android 动态权限申请
ContextCompat.checkSelfPermission 检查应用是否具有某个危险权限。如果应用具有此权限,方法将返回PackageManager.PERMISSION_GRANTED,并且应用可以继续操作。如果应用不具有此权限,方法将返回PackageManager.PERMISSION_DENIED,…...
【模型量化】量化基础
目录 一、认识量化 二、量化基础原理 2.1 对称量化和非对称量化 2.1.1 对称量化 2.1.2 非对称量化 2.1.3 量化后的矩阵乘 2.2 神经网络量化 2.2.1 动态量化 2.2.2 静态量化 2.3 量化感知训练 一、认识量化 量化的主要目的是节约显存、提高计算效率以及加快通信 dee…...
智能 + 安全:婴幼儿托育管理实训基地标准化建设方案
婴幼儿托育服务与管理实训基地智能安全的开发,需以“岗位能力-职业标准-行业需求”为核心逻辑,构建“需求分析-课程设计-教学实施-效果评估”全闭环体系。结合托育行业难点、技术赋能手段及职业能力要求,呈现课程开发全流程,重点突…...
AI重构家居营销新范式:DeepSeek如何破解行业流量与转化困局?
1. 流量下滑、成本攀升、内容同质化:家居行业亟需一场“效率革命” 中国家居行业正经历一场深刻的转型阵痛。线下门店客流量持续萎缩,线上获客成本攀升至临界点,传统营销模式陷入“高投入、低转化”的泥潭;智能家居产品快速迭代&…...
机器学习实操 第一部分 机器学习基础 第7章 集成学习与随机森林
机器学习实操 第一部分 机器学习基础 第7章 集成学习与随机森林 内容概要 第7章深入探讨了集成学习方法,这是一种结合多个预测模型(如分类器或回归器)以提高预测性能的技术。这些方法通过利用群体的智慧,可以比单个模型获得更好…...
如何用GPU Instancing来优化树木草石重复模型
1)如何用GPU Instancing来优化树木草石重复模型 2)Unity ASTC压缩后的纹理在部分安卓机型上不显示 3)现在大部分项目的竖版UI设计分辨率是多少 4)Android上拖拽物体不实时跟随手指的问题 这是第430篇UWA技术知识分享的推送&#x…...
Windows服务器部署全攻略:Flask+Vue+MySQL跨平台项目实战(pymysql版)
当你的后端(Flask+pymysql,Windows开发)与前端(Vue,Mac开发)需要统一部署到Windows服务器时,通过「IIS反向代理+原生组件适配」方案可实现稳定交互。以下是针对Windows环境的专属部署指南,解决路径适配、服务启动等核心问题。 一、Windows服务器环境准备(必做!) 1…...
自动驾驶-一位从业两年的独特视角
时间简介 2023.03 作为一名大三学生,加入到某量产车企,从事地图匹配研发 2023.07 地图匹配项目交付,参与离线云端建图研发 2023.10 拿到24届校招offer 2024.07 正式入职 2025.01 离线云端建图稳定,开始接触在线车端融图研发 自动…...
Vue 3 单文件组件中 VCA 语法糖及核心特性详解
在 Vue.js 的开发世界里,单文件组件(Single File Components,简称 SFC)是构建复杂应用的基石。它将 HTML、CSS 和 JavaScript 代码封装在一个.vue文件中,极大地提高了代码的可维护性和复用性。 本文将深入探讨单文件组…...
iVX:数字化转型全场景技术革新与生态构建实践
在数字经济蓬勃发展的当下,企业数字化转型需求日益迫切。iVX 凭借其独特的技术架构与创新解决方案,深度渗透工业互联网、元宇宙、智慧城市等领域,成为推动全场景数字化转型的重要力量。本文将重新梳理 iVX 的技术应用与生态价值,以…...
车辆检测新突破:VFM-Det 如何用大模型提升识别精度
目录 编辑 一、摘要 二、引言 三、相关工作 四、Coovally AI模型训练与应用平台 五、方法 概述 综述:基于区域建议的检测 基于VehicleMAE的感知器 六、实验分析 数据集与评估指标 实现细节 属性预测模块预训练 与SOTA检测器的对比实验 消融实验 V…...