HarmonyOS List实现拖动,条目拖拽的布局不显示

List条目拖动互换位置,onItemDragStart返回一个跟随手势拖动的布局,这个布局有时不显示,不显示时拖动互换不影响。长按条目,然后拖动,条目位置互换,拖动时会触发onItemDragStart,手指位置出现跟随拖动的布局,多次拖动会偶尔出现跟随手指移动的布局不显示的情况,但手指移动,条目互换是正常的,出现几率小。

HarmonyOS
2024-10-18 10:53:00
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zxjiu

关于手势拖动的布局的demo如下:

@Entry  
@Component  
struct ListExample {  
  @State arr: number[] = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]  
  @State dragItem:number = -1   
  @Builder  
  dragFloatView(item:number){  
    Column(){  
      Text("" + item)  
      .textAlign(TextAlign.Center).borderRadius(10).backgroundColor(Color.White)  
        .fontSize(16)  
        .width("100%").height(100)  
    }  
  }  
  build() {  
    Column() {  
      List({ space: 10}) {  
        ForEach(this.arr, (item: number) => {  
          ListItem() {  
            Text("" + item)  
            .width("100%").height(100).fontSize(16)  
              .textAlign(TextAlign.Center).borderRadius(10).backgroundColor( 0xFFFFFF)  
          }.visibility(item == this.dragItem ?Visibility.Hidden:Visibility.Visible)  
          .id(item.toString())  
        }, (item: string) => item)  
      }  
      .listDirection(Axis.Vertical)  
      .width("100%")  
      .onItemMove( (from: number, to: number) => {  
        return true  
      })  
        .onItemDragStart( (event: ItemDragInfo, itemIndex: number) => {  
          // 开始拖拽列表元素时触发。  
          this.dragItem = this.arr[itemIndex]  
          return this.dragFloatView(this.arr[itemIndex])  
        })  
        .onItemDragMove( (event: ItemDragInfo, itemIndex: number, insertIndex: number) => {  
          // 拖拽在列表元素范围内移动时触发。  
          animateTo({duration:200,curve : Curve.Linear},()=>{  
            let deleteIndex = this.arr.indexOf(Number(this.dragItem))  
            this.arr.splice(deleteIndex, 1)  
            this.arr.splice(insertIndex, 0, Number(this.dragItem))  
          })  
        })  
        .onItemDrop( (event: ItemDragInfo, itemIndex: number, insertIndex: number, isSuccess: boolean) => {  
          // 绑定该事件的列表元素可作为拖拽释放目标,当在列表元素内停止拖拽时触发。  
          this.dragItem = -1  
        })  
    }  
    .width("100%").height("100%").backgroundColor(0xDCDCDC)  
  }  
}
分享
微博
QQ
微信
回复
2024-10-18 18:34:13
相关问题
harmonyos-webview-布局增加load不显示
6567浏览 • 3回复 待解决
HarmonyOS如何实现list listitem拖拽
692浏览 • 1回复 待解决
HarmonyOS CustomDialogController 不显示
170浏览 • 1回复 待解决
使用List嵌套实现表格布局
891浏览 • 1回复 待解决
使用List组件实现多列布局
432浏览 • 1回复 待解决
HarmonyOS web组件alert不显示
389浏览 • 1回复 待解决
HarmonyOS web加载页面图片不显示
355浏览 • 1回复 待解决
HarmonyOS dialog调用open方法,不显示
207浏览 • 1回复 待解决
HarmonyOS 使用 api11 地图不显示
364浏览 • 1回复 待解决
HarmonyOS Web组件加载片段时候不显示
142浏览 • 1回复 待解决
image组件,files目录文件不显示
1572浏览 • 1回复 待解决
HarmonyOS Image组件网络图片不显示
245浏览 • 1回复 待解决
HarmonyOS web系统组件写css不显示
173浏览 • 1回复 待解决