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

网站手机客户端开发wordpress制造商单页

网站手机客户端开发,wordpress制造商单页,如何做网站 知乎,wordpress nextapp文章目录前言一、什么是流式读取?二、实现步骤总结前言 相信很多新童鞋刚接触AI产品或者小说产品会遇到一个要求,就是返回的内容需要流式读取,比如生成小说,不会一次性给你返回结果的,你会定时请求接口或者websocket&…

文章目录

  • 前言
  • 一、什么是流式读取?
  • 二、实现步骤
  • 总结


前言

相信很多新童鞋刚接触AI产品或者小说产品会遇到一个要求,就是返回的内容需要流式读取,比如生成小说,不会一次性给你返回结果的,你会定时请求接口或者websocket,每次给你返回一些文字,你要把每次的文字给组装起来并流式读取,来看看吧。


一、什么是流式读取?

流式读取,顾名思义像流水似得,慢慢读取,比如给你一篇文章,正常一下就有展示完了,但是有些地方需要流式效果,就需要一个字一个字慢慢读取达到效果。

二、实现步骤

代码如下(示例):

//定义变量
private var currentLength = 0 // 记录已显示的字符位置
private var animator: ValueAnimator? = null // 用于取消之前的动画
//每次调接口累加文本
for (i in listsj.indices) {context += listsj[i]}
//调用
animateTextFlow(context)
//实例化
val rotationAnimator = ObjectAnimator.ofFloat(imag_zq, "rotation", 0f, 360f)rotationAnimator.setDuration(2000) // 单次旋转时长(毫秒)rotationAnimator.repeatCount = ObjectAnimator.INFINITE // 无限循环rotationAnimator.interpolator = LinearInterpolator() // 线性匀速旋转rotationAnimator.start()
//流式读取方法
private fun animateTextFlow(fullText: String) {// 取消之前的动画并立即更新 currentLengthanimator?.cancel()animator = nullcurrentLength = text_context.text.length // 关键修复点val newText = fullText.substring(currentLength)if (newText.isEmpty()) returnval snapshotFullText = fullTextval snapshotCurrentLength = currentLengthanimator = ValueAnimator.ofInt(0, newText.length).apply {duration = newText.length * 50LaddUpdateListener { animation ->val index = animation.animatedValue as Inttext_context.text = snapshotFullText.substring(0, snapshotCurrentLength + index)scrollview.post { scrollview.fullScroll(View.FOCUS_DOWN) }}addListener(object : AnimatorListenerAdapter() {override fun onAnimationEnd(animation: Animator) {currentLength = snapshotCurrentLength + newText.length // 确保更新为实际长度}override fun onAnimationCancel(animation: Animator) {// 动画取消时,更新 currentLength 为当前已显示的字符数currentLength = text_context.text.length}})start()}}override fun onDestroy() {super.onDestroy()animator?.cancel() // 防止内存泄漏}

总结

其实流式读取很简单,需要注意的点就是记录每次读取的位置,不然会读取重复。

http://www.dtcms.com/a/409906.html

相关文章:

  • Net 》》C# 》》try finally 执行顺序
  • 在 Unity 项目中使用 FFMpeg 进行音频转码(WAV 转 MP3)
  • 使用Java将Word文件转换为PNG图片
  • 如何用Fail2ban保护Linux服务器?防止SSH暴力破解教程
  • 开源 C# 快速开发(五)自定义控件--仪表盘
  • 华为FreeClip 2耳夹耳机:让「戴着不摘」成为新的使用习惯
  • 算法继续刷起-2025年09月26日
  • AI笔记在学习与工作中的高效运用
  • QML学习笔记(十四)QML的自定义模块
  • ubuntu一键安装vscode: 使用官方 APT 仓库
  • python做网站的 框架企业邮箱什么样子
  • 学习游戏制作记录(爆炸敌人的制作)
  • 第三方软件登记测试机构:【软件登记测试机构HTML5测试技术】
  • 元宇宙的宠物经济:虚拟宠物的饲养与交易
  • 如何在 CentOS 7 上安装 bzip2-libs-1.0.6-13.el7.x86_64.rpm 文件
  • 做网站的盈利模式北京软件开发公司找和丰软件专业
  • 长视频分析模型 LongVU 论文内容总结与技术架构解析
  • Datawhale25年9月组队学习:llm-preview+Task4:微调大模型
  • Unity-动画目标匹配
  • 国标GB28181平台EasyGBS视频调阅功能在跨域安防监控中的核心应用
  • dlib库关键点定位和疲劳检测
  • 甘肃省建设工程网上投标网站学院门户网站建设
  • JavaWeb--day11--登录认证
  • [VCS]Verdi/VCS 波形调试最佳实践清单
  • 网站怎么做播放窗口网站数据模版
  • 深入理解Kafka的复制协议与可靠性保证
  • 自动化接口框架搭建分享-pytest第三部分
  • WPF 控件悬停弹窗高级指南:用 Behavior 实现带动画的智能 HoverPopup
  • 佳维视工业显示器在喷码机中的应用
  • 自存19-48