
回复
在使用网格Grid的应用中,可以通过拖拽子组件GridItem的方式,交换子组件的显示位置。
本示例在模拟器中显示的最终效果如下(预览器中显示效果略有差异):
设置Grid的editMode属性为true,使Grid进入编辑模式,从而可以拖拽Grid组件内部GridItem。
在Grid的相关拖拽事件中进行拖拽逻辑处理:
在onItemDragStart事件中显示拖拽过程中的图片,即被拖拽的GridItem。
在onItemDrop事件中根据拖拽前后的位置,完成两个GridItem位置交换的逻辑。
构建Grid组件及子组件GridItem,开启Grid组件的editMode属性。
当长按GridItem时触发onItemDragStart事件,在该事件中提供被拖拽GridItem的显示逻辑。
其中,pixelMapBuilder构造拖拽过程中显示的图片,即被拖拽的GridItem。
拖拽过程中GridItem显示的内容,在触摸事件发生时进行传递。
停止拖拽时触发onItemDrop事件,在该事件中完成两个GridItem位置交换的逻辑。
为了防止GridItem被拖拽到空白的区域,在交换之前判断拖拽插入的位置是否超出当前已有内容的范围:
其中,changeIndex为具体交换数组元素位置的逻辑:
通过上述步骤可以完成整个示例的开发,完整代码如下: