当前位置: 首页 > ai >正文

Harmony开发 List、Grid拖动自定义排序实现

1. Harmony开发 List、Grid拖动自定义排序实现

1.1. List拖动功能

  本示例基于显式动画、List组件实现了ListItem的上下拖动、ListItem切换以及ListItem插入的效果。
在这里插入图片描述
  实现思路:List手势拖动

@Entry
@Component
struct ListDragPage {@State private arr: string[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14].map((value) => value.toString())private listScroller: ListScroller = new ListScroller();private dragIndex: number = -1private originDragIndex: number = -1@State itemOffsetList: number[] = []private itemHeight: number = 100private listMargin: number = 10private itemTotalHeight: number = 110// dragItem距离List组件顶部的距离private dragOffsetY: number = 0// dragItem相对于List滚动顶部的距离private relativeOffsetY: number = 0// List组件能滑动的最大距离listMaxScrollOffsetY: number = 0// List组件开始拖动时的偏移originListOffsetY: number = 0// list组件规格private listArea: Area = {width: 0,height: 0,position: {},globalPosition: {}}aboutToAppear(): void {this.itemOffsetList = new Array<number>(this.arr.length)}initState() {for (let i = 0; i < this.itemOffsetList.length; i++) {this.itemOffsetList[i] = 0}this.dragIndex = -1this.originDragIndex = -1this.dragOffsetY = 0this.originListOffsetY = this.listScroller.currentOffset().yOffset}startDragItem(dragIndex: number) {this.initState()animateTo({ curve: Curve.Linear }, () => {this.dragIndex = dragIndexthis.originDragIndex = dragIndex})}increaseDragIndex(eventOffsetY: number) {let tmp = this.arr.splice(this.dragIndex, 1)this.arr.splice(this.dragIndex + 1, 0, tmp[0])this.dragIndex = this.dragIndex + 1this.itemOffsetList[this.dragIndex] =eventOffsetY - (this.dragIndex - this.originDragIndex) * this.itemTotalHeight +this.listScroller.currentOffset().yOffset - this.originListOffsetYthis.itemOffsetList[this.dragIndex - 1] = this.itemTotalHeightanimateTo({ curve: Curve.Sharp, duration: 100 }, () => {this.itemOffsetList[this.dragIndex - 1] = 0})}decreaseDragIndex(eventOffsetY: number) {let tmp = this.arr.splice(this.dragIndex, 1)this.arr.splice(this.dragIndex - 1, 0, tmp[0])this.dragIndex = this.dragIndex - 1this.itemOffsetList[this.dragIndex] =eventOffsetY - (this.dragIndex - this.originDragIndex) * this.itemTotalHeight +this.listScroller.currentOffset().yOffset - this.originListOffsetYthis.itemOffsetList[this.dragIndex + 1] = -this.itemTotalHeightanimateTo({ curve: Curve.Sharp, duration: 100 }, () => {this.itemOffsetList[this.dragIndex + 1] = 0})}cancelDrag() {this.initState()}endDragItem() {animateTo({ curve: Curve.Sharp, duration: 100 }, () => {this.initState()})}build() {Column() {List({ space: this.listMargin
http://www.xdnf.cn/news/6829.html

相关文章:

  • 车载诊断架构 --- 核心网关流控制机制需求
  • Python训练打卡Day26
  • c++成员函数返回类对象引用和直接返回类对象的区别
  • 时间筛掉了不够坚定的东西
  • STM32之蜂鸣器和按键
  • Face Over 84.0| 利用AI技术交换照片或视频中的面孔,制作有趣内容
  • (8)python开发经验
  • 如何在纷杂的环境当中保持保持独立思考能力?
  • 基于多头自注意力机制(MHSA)增强的YOLOv11主干网络—面向高精度目标检测的结构创新与性能优化
  • HCIP第六次作业
  • Web3开发工具与框架全解析:从入门到实战
  • 【matlab技巧】通过手绘的方法设计二维运动轨迹,附MATLAB程序
  • 机器学习 day04
  • 线性dp练习(碱基配对)
  • 【OpenCV】基本数据类型及常见图像模式
  • java中的循环结构
  • MySQL——4、表的约束
  • 【Java】应对高并发的思路
  • 使用Spring Boot和Spring Security构建安全的RESTful API
  • 第8讲、Multi-Head Attention 的核心机制与实现细节
  • Github 2025-05-17 Rust开源项目日报 Top10
  • Bitmap原理及Hive去重方式对比
  • 网络流量分析 | Zeek(上)
  • 消息的简介
  • jvm安全点(二)openjdk17 c++源码垃圾回收安全点信号函数处理线程阻塞
  • IntraWeb 16.0.2 + Bootstrap 4 居中布局实战(附源码+效果图)
  • 常见的实时通信技术(轮询、sse、websocket、webhooks)
  • pnpm 与 npm 的核心区别
  • 单细胞转录组(4)Cell Ranger
  • nodejs快速入门到精通1