HarmonyOS NEXT应用开发—多层级轮播图案例

介绍

本示例介绍使用ArkUIstack 组件实现多层级瀑布流。该场景多用于购物、资讯类应用。

效果图预览

使用说明

  1. 加载完成后显示轮播图可以左右滑动。

实现思路

SwiperDataSource,实现IDataSource接口的对象,用于LazyForEach加载数据。源码参考SwiperData.ets

/**
 * 实现IDataSource接口的对象,用于轮播图组件加载数据
 */
class BasicDataSource implements IDataSource {
  private listeners: DataChangeListener[] = [];
  private originDataArray: SwiperData[] = [];

  public totalCount(): number {
    return 0;
  }

  public getData(index: number): SwiperData {
    return this.originDataArray[index];
  }

  /**
   * 该方法为框架侧调用,为LazyForEach组件向其数据源处添加listener监听
   */
  registerDataChangeListener(listener: DataChangeListener): void {
    if (this.listeners.indexOf(listener) < 0) {
      console.info('add listener');
      this.listeners.push(listener);
    }
  }

  /**
   * 该方法为框架侧调用,为对应的LazyForEach组件在数据源处去除listener监听
   */
  unregisterDataChangeListener(listener: DataChangeListener): void {
    const pos = this.listeners.indexOf(listener);
    if (pos >= 0) {
      console.info('remove listener');
      this.listeners.splice(pos, 1);
    }
  }
  ...

2.通过stack和offsetx实现多层级堆叠。源码参考SwiperComponent.ets

Stack() {
  LazyForEach(this.swiperDataSource, (item: SwiperData, index: number) => {
    Stack({ alignContent: Alignment.BottomStart }) {
      Image(item.imageSrc)
        .objectFit(ImageFit.Auto)
        .width('100%')
        .height('100%')
        .borderRadius($r('app.string.main_page_top_borderRadius'))
  ...

3.通过手势控制调用显式动画同时修改数据中间值currentIndex来修改组件zIndex提示组件层级实现动画切换效果。源码参考SwiperComponent.ets

https://gitee.com/harmonyos-cases/cases/blob/master/CommonAppDevelopment/feature/swipercomponent/src/main/ets/components/mainpage/SwiperComponent.ets

高性能知识点

本示例使用了LazyForEach进行数据懒加载以降低内存占用。

工程结构&模块类型

functionalscenes                                // har类型
|---model
|   |---SwiperData.ets                          // 轮播数据模型和数据控制器 
|---mainpage
|   |---FunctionalScenes.ets                    // 轮播页面

模块依赖

不涉及

参考资料

1.lazyForeach参考文档
2.animationTo参考文档

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr21.cn/FV7h05

腾讯T10级高工技术,安卓全套VIP课程全网免费送:https://qr21.cn/D2k9D5


http://www.niftyadmin.cn/n/5440359.html

相关文章

MNN createSession 之创建流水线后端(四)

系列文章目录 MNN createFromBuffer&#xff08;一&#xff09; MNN createRuntime&#xff08;二&#xff09; MNN createSession 之 Schedule&#xff08;三&#xff09; MNN createSession 之创建流水线后端&#xff08;四&#xff09; MNN Session::resize 之流水线编码&am…

android、Jetpack Compose使用 Room数据库kapt注解时出现的相关问题整理。

谢谢阅览、关注!! 一、问题描述: 问题 1:> a failure occurred while executing org.jetbrains.kotlin.compilerrunner.gradlecompilerrunnerwithworkers$gradlekotlincompilerworkaction > internal compiler error. see log for more details 问题 2:a failure …

四、分布式锁之自定义分布式锁

1、基本原理和实现方式对比 分布式锁&#xff1a;满足分布式系统或集群模式下多个进程可见并且互斥的锁。分布式锁的核心思想就是多线程都使用同一把锁&#xff0c;实现程序串行执行。 分布式锁需要具备的条件&#xff1a; 特性含义可见性多个线程都能感知到变化互斥性分布…

YOLOV5 改进:替换backbone为Vgg

1、前言 参考上一章的博文(YOLOV5 改进:替换backbone(MobileNet为例)-CSDN博客)将yolov5的backbone换成自定义的vgg网络 网络参数量很多,并且刚开始训练的时候精度很差,应该是没有迁移学习导致的。 大概经历了30-40多个epoch,网络才进行收敛, 加大epoch可以提升网络…

cmake 报错: could not open ‘kernel32.lib‘: no such file or directory

首次用hello world想配置cmake。powershell下执行cmake .. -G "MinGW Makefiles"报的这个错。 因为查到这个库是windows下的&#xff0c;于是想着换成Unix试下。 执行&#xff1a;cmake .. -G "Unix Makefiles" 成功 cmake 版本&#xff1a; cmake ver…

【图像分割】使用Otsu 算法及迭代计算最佳全局阈值估计并实现图像分割(代码实现与分析)

本实验要求理解全局阈值分割的概念&#xff0c;并实现文本图像分割。需要大家深入理解Ostu 算法的实现过程及其迭代原理&#xff0c;同时通过学习使用Otsu 算法及其迭代&#xff0c;实践图像分割技术在文本图像处理中的应用。 以下将从实验原理、实验实现、实验结果分析三部分对…

基于深度学习的场景文本检测

CTPN 简介&#xff1a; 基于目标检测方法的文本检测模型&#xff0c;在Faster RCNN的基础上进行了改进&#xff0c;并结合双向LSTM增强了序列提取特征&#xff0c;通过anchor和gt的设计将文本检测任务转化为一连串小尺度文本框的检测。 解决问题&#xff1a; 文本长短不一&…

python--剑指offer--题目目录-学习计划

第一天 09. 用两个栈实现队列30. 包含min函数的栈 第二天 06. 从尾到头打印链表24. 反转链表35. 复杂链表的复制 第三天 05. 替换空格58 - II. 左旋转字符串 第四天 03. 数组中重复的数字53 - I. 在排序数组中查找数字 I53 - II. 0&#xff5e;n-1中缺失的数字 第五天 04.…