赞
踩
下拉刷新是一个高频使用的功能,ArkUI 开发框架也提供了下拉刷新组件 Refresh,该组件的使用非常简单,读者可参阅笔者在《ArkUI实战》第六章 第 5 小节 的介绍,本文笔者讲解一下笔者在项目上实现的一个下拉刷新组件 RefreshList,该组件的运行效果如下图所示:
@Component struct RefreshList { build() { Column() { Row() { // header布局 } .id("refresh_header") .width("100%") .height(50) .position({ // 利用该属性,把refresh_header布局在 Column 顶部 x: 0, y: -50 }) Column() { // content 布局 } .id("refresh_content") .width("100%") .height("100%") .position({ // 利用该属性,把refresh_content布局向上做偏移 x: 0, y: 0 }) } .id("refresh_list") .width("100%") .height("100%") } }
@Component struct RefreshList { private refreshHeaderHeight: number = 50; private offsetY: number = -this.refreshHeaderHeight; private lastX: number; private lastY: number; private downY: number; build() { Column() { Row() .id("refresh_header") .width("100%") .height(this.refreshHeaderHeight) .backgroundColor("#bbaacc") .position({ x: 0, y: this.offsetY }) Column() { } .id("refresh_content") .width("100%") .height("100%") .backgroundColor("#aabbcc") .position({ x: 0, y: this.offsetY + this.refreshHeaderHeight }) } .id("refresh_list") .width("100%") .height("100%") .onTouch((event) => { if (event.type == TouchType.Down) { // 处理 down 事件 this.onTouchDown(event); } else if (event.type == TouchType.Move) { // 处理 move 事件 this.onTouchMove(event); } else if (event.type == TouchType.Cancel || event.type == TouchType.Up) { // 处理 up 事件 this.onTouchUp(event); } }) } private onTouchDown(event: TouchEvent) { this.lastX = event.touches[0].screenX; this.lastY = event.touches[0].screenY; this.downY = this.lastY; } private onTouchMove(event: TouchEvent) { let currentX = event.touches[0].screenX; let currentY = event.touches[0].screenY; let deltaX = currentX - this.lastX; let deltaY = currentY - this.lastY; if (Math.abs(deltaX) < Math.abs(deltaY) && Math.abs(deltaY) > 5) { // 达到滑动条件 } } private onTouchUp(event: TouchEvent) { } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。