HarmonyOS 鸿蒙Next:让grid编辑模式的自定义拖动元素拖出grid范围就被裁剪,类似.clip(true)
HarmonyOS 鸿蒙Next:让grid编辑模式的自定义拖动元素拖出grid范围就被裁剪,类似.clip(true) 使用了grid布局,同层还有header和title内容。editMode(true)进入编辑模式后拖拽,发现拖拽的子内容可以进入header和title区域显示,有没有属性或者方法可以让他只在grid范围内拖拽,超出范围就被类似于图片。clip(true)拖动出边界被裁剪的效果。目前已试。clip(true)和 zindex方式都无效
导入 { JSON } from ‘@kit.ArkTS’
@Component 结构 GridExample { @State numbers: string[] = [] scroller: Scroller = new Scroller() @State text: string = ‘drag’
@Builder pixelMapBuilder() { //拖拽过程样式 Column { Text(this.text) .fontSize(16) .backgroundColor(0xF9CF93) .width(80) .height(80) .textAlign(TextAlign.Center) } }
aboutToAppear() { for (let i = 1; i <= 15; i++) { this.numbers.push(i + ‘’) } }
changeIndex(index1: number, index2: number) { //交换数组位置 let temp: string; temp = this.numbers[index1]; this.numbers[index1] = this.numbers[index2]; this.numbers[index2] = temp; }
build() { Column({ space: 5 }) { Grid(this.scroller) { ForEach(this.numbers, (day: string) => { GridItem { Text(day) .fontSize(16) .backgroundColor(0xF9CF93) .width(80) .height(80) .textAlign(TextAlign.Center) } }) } .columnsTemplate(‘1fr 1fr 1fr’) .columnsGap(10) .rowsGap(10) .width(‘90%’) .backgroundColor(0xFAEEE0) .height(‘60%’) .editMode(true) //设置Grid是否进入编辑模式,进入编辑模式可以拖拽Grid组件内部GridItem .onItemDragStart((event: ItemDragInfo, itemIndex: number) => { //第一次拖拽此事件绑定的组件时,触发回调。 this.text = this.numbers[itemIndex] return this.pixelMapBuilder() //设置拖拽过程中显示的图片。 }) .onItemDrop((event: ItemDragInfo, itemIndex: number, insertIndex: number, isSuccess: boolean) => { //绑定此事件的组件可作为拖拽释放目标,当在本组件范围内停止拖拽行为时,触发回调。 // isSuccess=false时,说明drop的位置在grid外部;insertIndex > length时,说明需要删除元素 if (!isSuccess || insertIndex >= this.numbers.length) { this.numbers.splice(itemIndex, 1) console.log(JSON.stringify(this.numbers)) return } console.info(‘beixiang’ + itemIndex + ‘’, insertIndex + ‘’) //itemIndex拖拽起始位置,insertIndex拖拽插入位置 this.changeIndex(itemIndex, insertIndex) }) } .width(‘100%’) .margin({ top: 5 }) } }
更多关于HarmonyOS 鸿蒙Next:让grid编辑模式的自定义拖动元素拖出grid范围就被裁剪,类似.clip(true)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
没用啊,一拖拽就显示一个小方块,你们官方的demo也是一样的,显示不正常,
哦,在模拟器上不正常,
真机上是ok的,你可升级模拟器试试,
在HarmonyOS鸿蒙Next系统中,如果你希望在grid编辑模式下实现自定义拖动元素在拖出grid范围时被裁剪的效果,可以通过监听拖动事件并限制元素的位置来实现。这里不涉及Java或C语言的具体代码,而是提供一个大致的实现思路。
首先,你需要为自定义拖动元素添加拖动事件监听器。在拖动过程中,持续检查元素的位置是否超出了grid的边界。一旦检测到元素超出边界,可以通过设置元素的坐标或边界属性来限制其位置,从而实现裁剪效果。
具体来说,你可以在拖动事件的处理函数中,添加逻辑来判断元素的位置。如果元素的位置超出了grid的边界,就将其位置调整至grid的边缘,这样用户就无法看到元素被拖出grid范围的部分。
需要注意的是,鸿蒙系统提供了丰富的UI组件和布局管理器,你可以利用这些组件和管理器来更方便地实现这一功能。例如,你可以使用布局管理器的边界属性来限制子元素的位置,或者使用自定义布局来精确控制元素的位置和显示范围。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html