写点什么

【每日学点 HarmonyOS Next 知识】点赞动画实现、Grid 当前显示条目、刷新组件、代码规范、状态变量

作者:轻口味
  • 2025-03-15
    北京
  • 本文字数:1909 字

    阅读完需:约 6 分钟

【每日学点HarmonyOS Next知识】点赞动画实现、Grid当前显示条目、刷新组件、代码规范、状态变量

1、HarmonyOS 点赞动画实现方案?

可以在要覆盖的组件上添加 overlay 组件,组件请参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-attributes-overlay-V5


overlay 组件是一个 stack 等容器组件,包含多个(比如 5 个)image 组件并设置为 invisible。点赞时按顺序设置其中 image 组件的 visible 属性,并设置一个定时器控制其重新变成 invisible,添加消失时的动画效果;随机化设置其 offset,显示在屏幕的不同位置,并在组件消失时还原。

2、HarmonyOS Grid 中可以动态获取到当前显示的所有条目元素吗?

希望可以在 Grid 显示时和收集到所有子元素条目组件的数据,但如果在子条目元素的组件监听 onVisibleAreaChange,无法找到收集所有元素组件完成的时机,因为它是一个个地触发。


可以通过 onScrollIndex 接口来获取元素,可以参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-container-grid-V5

3、HarmonyOS Refresh 组件传入自定义的刷新 view,在组件收起时,出现半个图标没有隐藏?

使用 Refresh 包裹 List,同时在 Fefresh 中传入自定义组件 customRefreshComponent,下拉刷新 List 时,Refresh 组件收起后,露出半个图标。


customRefreshComponent() {  Stack() {    Row() {      LoadingProgress().height(32)      Text("正在刷新...").fontSize(16).margin({ left: 20 })    }    .alignItems(VerticalAlign.Center)  }.width("100%").align(Alignment.Center)  //.clip(true)  .constraintSize({minHeight:32})}//设置.clip(true)或者.constraintSize({minHeight:32})可解决,minHeight的值可自行设置,参照LoadingProgress的高度
复制代码

4、HarmonyOS 代码开发规范?

参考 Code Linter 检查:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-code-linter-V5


在工程根目录下创建 code-linter.json5 配置文件,可对于代码检查的范围及对应生效的检查规则进行配置,其中 files 和 ignore 配置项共同确定了代码检查范围,ruleSet 和 rules 配置项共同确定了生效的规则范围。具体配置项功能如下:


files:配置待检查的文件名单,如未指定目录,将检查当前被选中的文件或文件夹中所有的.ets 文件。


ignore:配置无需检查的文件目录,其指定的目录或文件需使用相对路径格式,相对于 code-linter.json5 所在工程根目录,例如:build/**/*。


ruleSet:配置检查使用的规则集,规则集支持一次导入多条规则。规则详情请参见 Code Linter 代码检查规则。目前支持的规则集包括:


  • 通用规则 @typescript-eslint

  • 一次开发多端部署规则 @cross-device-app-dev

  • ArkTS 代码风格规则 @hw-stylistic

  • 安全规则 @security

  • 性能规则 @performance

  • 预览规则 @previewer

5、HarmonyOS 使用 ObserverV2 的时候,如何传递被 @Trace 修饰变量的引用?

使用 ObserverV2 的时候,如何传递被 @Trace 修饰变量的引用?


@ObservedV2 现在不允许和 @Prop 一起使用,会报错。参考 demo:


@ObservedV2class ViewModel {  @Trace title: string = "开始"  @Trace title2: string = "t1"  @Trace observeList: DemoItemObserved[] = []
loadData() { setTimeout(() => { this.title = "成功"; this.title2 = "t2"; for (let index = 0; index < 4; index++) { this.observeList.push(new DemoItemObserved(`张${index}`, "中文学校")) } }, 2000) }}
@ObservedV2class DemoItemObserved { @Trace title: string = "张大" @Trace subTitle: string = "外国语学校"
constructor(title: string, subTitle: string) { this.title = title; this.subTitle = subTitle; }}
@Componentstruct View1 { @Prop title: string build() { Text(this.title) }}
@Componentstruct View2 { viewModel: ViewModel = new ViewModel()
build() { List() { ForEach(this.viewModel.observeList, (item: DemoItemObserved) => { ListItem() { Row() { Text(item.title) Text(item.subTitle) } } }) } }}
@Entry@Componentstruct Index { viewModel: ViewModel = new ViewModel()
build() { Column() { Button("模拟加载数据") .onClick(() => { this.viewModel.loadData() }) Text(this.viewModel.title) View1({ title: this.viewModel.title2 }) View2({ viewModel: this.viewModel }) } }}
复制代码


</br>


![[Config/Templates/公众号介绍|公众号介绍]]


![[公众号卡片]]![[公众号欢迎词]]

发布于: 刚刚阅读数: 4
用户头像

轻口味

关注

🏆2021年InfoQ写作平台-签约作者 🏆 2017-10-17 加入

Android、音视频、AI相关领域从业者。 欢迎加我微信wodekouwei拉您进InfoQ音视频沟通群 邮箱:qingkouwei@gmail.com

评论

发布
暂无评论
【每日学点HarmonyOS Next知识】点赞动画实现、Grid当前显示条目、刷新组件、代码规范、状态变量_HarmonyOS_轻口味_InfoQ写作社区