赞
踩
本示例介绍使用ArkUIstack 组件实现多层级瀑布流。该场景多用于购物、资讯类应用。
使用说明
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
- 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'))
- // 轮播图底部蒙层
- Stack() {
- Column() {
- }
- .width('100%')
- .height('100%')
- .backgroundColor(Color.Black)
- .opacity(0.3)
- .borderRadius({
- topLeft: 0,
- topRight: 0,
- bottomLeft: $r('app.string.main_page_top_borderRadius'),
- bottomRight: $r('app.string.main_page_top_borderRadius')
- })
-
- Text(item.name)
- .width('100%')
- .height('100%')
- .fontSize(16)
- .fontColor(Color.White)
- .textAlign(TextAlign.Start)
- .padding($r('app.string.main_page_padding5'))
- }
- .height('17%')
- }
- .gesture(
- PanGesture({ direction: PanDirection.Horizontal })
- .onActionStart((event: GestureEvent) => {
- this.startAnimation(event.offsetX < 0);
- })
- )
- startAnimation(isLeft: boolean): void {
- animateTo({
- duration: 300,
- }, () => {
- let dataLength: number = this.swiperData.length;
- let tempIndex: number = isLeft ? this.currentIndex + 1 : this.currentIndex - 1 + dataLength;
- this.currentIndex = tempIndex % dataLength;
- })
- }

本示例使用了LazyForEach进行数据懒加载以降低内存占用。
- functionalscenes // har类型
- |---model
- | |---SwiperData.ets // 轮播数据模型和数据控制器
- |---mainpage
- | |---FunctionalScenes.ets // 轮播页面
不涉及
有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。
这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。
希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!
如果你是一名有经验的资深Android移动开发、Java开发、前端开发、对鸿蒙感兴趣以及转行人员,可以直接领取这份资料
获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料
HarmonOS基础技能
有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。
获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料
OpenHarmony北向、南向开发环境搭建
获取以上完整鸿蒙HarmonyOS学习资料,请点击→纯血版全套鸿蒙HarmonyOS学习资料
总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。