鸿蒙开发:如何实现文本跑马灯效果

前言

本文基于Api13

跑马灯的场景非常常见,在日常的开发中常见于消息、广告及公告通知,内容从左到右或者从右到左进行滚动播出,在鸿蒙开发中,实现起来可以说是非常简单,一个属性便可以搞定。

比如给定一段内容,让它从右往左进行滚动播出,效果如下:

鸿蒙当中,直接给文本组件,设置textOverflow属性,让overflow的值为TextOverflow.MARQUEE即可:

TypeScript 复制代码
Text(this.message)
        .textOverflow({ overflow: TextOverflow.MARQUEE })
        .border({ width: 1, color: Color.Gray })
        .padding({ top: 10, bottom: 10 })
        .margin({ left: 10, right: 10 })

虽然说,TextOverflow.MARQUEE实现了一个跑马灯效果,但是仍然存在一些问题,比如,我想控制一下播放的速度,或者我想暂停滚动,再或者,我想从左往右滚动等等,有很多阻碍性问题存在。

为了解决这些问题,鸿蒙给我们提供了一个,专门用于跑马灯的组件Marquee,解决Text跑马灯的痛点。

Marquee

Marquee是一个专门的跑马灯组件,用于滚动展示一段单行文本,自身有五个属性可供使用。

属性 类型 概述
start boolean 控制跑马灯是否进入播放状态。
step number 滚动动画文本滚动步长,可用于控制速度。
loop number 设置重复滚动的次数,小于等于零时无限循环
fromStart boolean 设置文本从头开始滚动或反向滚动
src string 需要滚动的文本

除此之外,我们也可以通过文本属性也更改内容的样式。

属性 类型 概述
fontColor ResourceColor 设置字体颜色
fontSize Length 设置字体大小
fontWeight number /FontWeight /string 设置文本的字体粗细,设置过大可能会在不同字体下有截断
fontFamily string/Resource 设置字体列表
allowScale boolean 设置是否允许文本缩放
marqueeUpdateStrategy MarqueeUpdateStrategy 跑马灯组件属性更新后,跑马灯的滚动策略。(当跑马灯为播放状态,且文本内容宽度超过跑马灯组件宽度时,该属性生效。)

简单案例

TypeScript 复制代码
@Entry
@Component
struct DemoPage {
  @State message: string = "我是一段比较长的内容,主要用于测试跑马灯的效果,看看如何进行滚动"
  @State start: boolean = true
  @State fromStart: boolean = true

  build() {
    Column() {
      Marquee({
        start: this.start,
        fromStart: this.fromStart,
        step: 2,
        src: this.message
      })

      Row() {
        Button("开始")
          .onClick(() => {
            this.start = true
          })
        Button("暂停")
          .onClick(() => {
            this.start = false
          })
        Button("切换方向")
          .onClick(() => {
            this.fromStart = !this.fromStart
          })
      }.margin({ top: 10 })
    }
    .height('100%')
    .width('100%')
    .justifyContent(FlexAlign.Center)
  }
}

Marquee除了可以实现跑马灯的功能,还有一些事件的监听,比如当滚动的文本内容变化或者开始滚动时触发onStart,完成一次滚动时触发,若循环次数不为1,则该事件会多次触发的监听onBounce,以及滚动全部循环次数完成时触发回调监听onFinish。

相关总结

如果只是一个普通的跑马灯效果,而且Text文本组件中的TextOverflow.MARQUEE可以满足需求,以Text为主,如果你想控制文本的速度,暂停等功能,可以使用Marquee,如果你想实现复杂的场景滚动,比如图片,各种组件嵌套滚动,这种只能自己定义了。

相关推荐
恋猫de小郭4 分钟前
Android Studio 放着没怎么用,怎么也会越来越卡?
android·前端·flutter
Kapaseker8 分钟前
Compose 动画 — 显隐的艺术
android·kotlin
黄林晴12 分钟前
Android官方发布 AppFunctions,让系统AI直接调用你的APP
android·agent
想你依然心痛43 分钟前
HarmonyOS 6(API 23)实战:基于Face AR数字人驱动与Body AR手势控制的“星播工坊“——PC端沉浸式虚拟直播系统
华为·ar·harmonyos·悬浮导航·沉浸光感
哦***71 小时前
真实评测 | FreeBuds Pro 5独立空间音频
华为·音频·harmonyos
00后程序员张1 小时前
iOS开发中Xcode安装不完整问题解决方案与配置指南
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
前端不太难1 小时前
一个电商鸿蒙 App 的架构设计实战
华为·状态模式·harmonyos
2501_915909061 小时前
完整指南:如何将iOS应用上架到App Store
android·ios·小程序·https·uni-app·iphone·webview
90后的晨仔1 小时前
SwiftUI 高级依赖注入:构建可测试、可扩展应用的基石
ios
90后的晨仔1 小时前
SwiftUI 中的 Combine:响应式编程完全指南
ios