赞
踩
设置组件是否可以响应拖拽事件。
说明:
从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
ArkUI框架对以下组件实现了默认的拖拽能力,支持对数据的拖出或拖入响应,开发者只需要将这些组件的draggable属性设置为true,即可使用默认拖拽能力。
默认支持拖出能力的组件(可从组件上拖出数据):Search、TextInput、TextArea、RichEditor、Text、Image、FormComponent、Hyperlink
默认支持拖入能力的组件(目标组件可响应拖入数据):Search、TextInput、TextArea、Video
开发者也可以通过实现通用拖拽事件来自定义拖拽响应。
其他组件需要开发者将draggable属性设置为true,并在onDragStart等接口中实现数据传输相关内容,才能正确处理拖拽。
allowDrop(value: Array<UniformDataType>)
设置该组件上允许落入的数据类型。
系统能力: SystemCapability.ArkUI.ArkUI.Full
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
value | Array<UniformDataType> | 是 | 设置该组件上允许落入的数据类型。 默认值:空 |
draggable(value: boolean)
设置该组件是否允许进行拖拽。
系统能力: SystemCapability.ArkUI.ArkUI.Full
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
value | boolean | 是 | 设置该组件是否允许进行拖拽。 默认值:false |
dragPreview(value: CustomBuilder | DragItemInfo)
设置组件拖拽过程中的预览图。
系统能力: SystemCapability.ArkUI.ArkUI.Full
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
value | CustomBuilder | DragItemInfo | 是 | 设置组件拖拽过程中的预览图,仅在onDragStart拖拽方式中有效。 当组件支持拖拽并同时设置bindContextMenu的预览图时,则长按浮起的预览图以bindContextMenu设置的预览图为准。开发者在onDragStart中返回的背板图优先级低于dragPreview设置的预览图,当设置了dragPreview预览图时,拖拽过程中的背板图使用dragPreview预览图。由于CustomBuilder需要离线渲染之后才能使用,因此存在一定的性能开销和时延,推荐优先使用 DragItemInfo中的PixelMap方式。 默认值:空 |
dragPreviewOptions(value: DragPreviewOptions)
设置拖拽过程中背板图处理模式。
系统能力: SystemCapability.ArkUI.ArkUI.Full
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
value | DragPreviewOptions11+ | 是 | 设置拖拽过程中背板图处理模式。 默认值:DragPreviewMode.AUTO |
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
mode | DragPreviewMode | 否 | 表示拖拽过程中背板图处理模式。 默认值:DragPreviewMode.AUTO |
名称 | 枚举值 | 描述 |
---|---|---|
AUTO | 0 | 系统根据拖拽场景自动改变跟手点位置,根据规则自动对拖拽背板图进行缩放变换等。 |
DISABLE_SCALE | 1 | 禁用系统对拖拽背板图的缩放行为。 |
allowDrop与draggable属性用法示例
- // xxx.ets
- import UDC from '@ohos.data.unifiedDataChannel';
- import UTD from '@ohos.data.uniformTypeDescriptor';
-
- @Entry
- @Component
- struct ImageExample {
- @State uri: string = ""
- @State AblockArr: string[] = []
- @State BblockArr: string[] = []
- @State AVisible: Visibility = Visibility.Visible
- @State dragSuccess :Boolean = false
-
- build() {
- Column() {
- Text('Image拖拽')
- .fontSize('30dp')
- Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.SpaceAround }) {
- Image($r('app.media.icon'))
- .width(100)
- .height(100)
- .border({ width: 1 })
- .visibility(this.AVisible)
- .draggable(true)
- .onDragEnd((event: DragEvent) => {
- let ret = event.getResult();
- if(ret == 0) {
- console.log("enter ret == 0")
- this.AVisible = Visibility.Hidden;
- } else {
- console.log("enter ret != 0")
- this.AVisible = Visibility.Visible;
- }
- })
- }
- .margin({ bottom: 20 })
- Row() {
- Column(){
- Text('不允许释放区域(显示不允许角标但可以释放)')
- .fontSize('15dp')
- .height('10%')
- List(){
- ForEach(this.AblockArr, (item:string, index) => {
- ListItem() {
- Image(item)
- .width(100)
- .height(100)
- .border({width: 1})
- }
- .margin({ left: 30 , top : 30})
- }, (item:string) => item)
- }
- .height('90%')
- .width('100%')
- .allowDrop([UTD.UniformDataType.TEXT])
- .onDrop((event?: DragEvent, extraParams?: string) => {
- this.uri = JSON.parse(extraParams as string).extraInfo;
- this.AblockArr.splice(JSON.parse(extraParams as string).insertIndex, 0, this.uri);
- console.log("ondrop not udmf data");
- })
- .border({width: 1})
- }
- .height("50%")
- .width("45%")
- .border({ width: 1 })
- .margin({ left: 12 })
- Column(){
- Text('可释放区域')
- .fontSize('15dp')
- .height('10%')
- List(){
- ForEach(this.BblockArr, (item:string, index) => {
- ListItem() {
- Image(item)
- .width(100)
- .height(100)
- .border({width: 1})
- }
- .margin({ left: 30 , top : 30})
- }, (item:string) => item)
- }
- .border({width: 1})
- .height('90%')
- .width('100%')
- .allowDrop([UTD.UniformDataType.IMAGE])
- .onDrop((event?: DragEvent, extraParams?: string) => {
- console.log("enter onDrop")
- let dragData:UnifiedData = (event as DragEvent).getData() as UnifiedData;
- if(dragData != undefined) {
- let arr:Array<UDC.UnifiedRecord> = dragData.getRecords();
- if(arr.length > 0) {
- let image = arr[0] as UDC.Image;
- this.uri = image.imageUri;
- this.BblockArr.splice(JSON.parse(extraParams as string).insertIndex, 0, this.uri);
- } else {
- console.log(`dragData arr is null`)
- }
- } else {
- console.log(`dragData is undefined`)
- }
- console.log("ondrop udmf data");
- this.dragSuccess = true
- })
- }
- .height("50%")
- .width("45%")
- .border({ width: 1 })
- .margin({ left: 12 })
- }
- }.width('100%')
- }
- }
dragPreview属性用法示例
- // xxx.ets
- @Entry
- @Component
- struct DragPreviewDemo{
- @Builder dragPreviewBuilder() {
- Column() {
- Text("dragPreview")
- .width(150)
- .height(50)
- .fontSize(20)
- .borderRadius(10)
- .textAlign(TextAlign.Center)
- .fontColor(Color.Black)
- .backgroundColor(Color.Pink)
- }
- }
-
- @Builder MenuBuilder() {
- Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) {
- Text("menu item 1")
- .fontSize(15)
- .width(100)
- .height(40)
- .textAlign(TextAlign.Center)
- .fontColor(Color.Black)
- .backgroundColor(Color.Pink)
- Divider()
- .height(5)
- Text("menu item 2")
- .fontSize(15)
- .width(100)
- .height(40)
- .textAlign(TextAlign.Center)
- .fontColor(Color.Black)
- .backgroundColor(Color.Pink)
- }
- .width(100)
- }
-
- build() {
- Row() {
- Column() {
- Image('/resource/image.jpeg')
- .width("30%")
- .draggable(true)
- .bindContextMenu(this.MenuBuilder, ResponseType.LongPress)
- .onDragStart(() => {
- console.log("Image onDragStart")
- })
- .dragPreview(this.dragPreviewBuilder)
- }
- .width("100%")
- }
- .height("100%")
- }
- }
dragPreviewOptions属性用法示例
- // xxx.ets
- @Entry
- @Component
- struct dragPreviewOptionsDemo{
- build() {
- Row() {
- Column() {
- Image('/resource/image.jpeg')
- .margin({ top: 10 })
- .width("100%")
- .draggable(true)
- .dragPreviewOptions({ mode: DragPreviewMode.AUTO })
- }
- .width("100%")
- .height("100%")
- }
- }
- }
最后,有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(Harmony NEXT)资料用来跟着学习是非常有必要的。
这份鸿蒙(Harmony NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(Harmony NEXT)技术知识点。
希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!
获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料
HarmonOS基础技能
有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。
获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料
OpenHarmony北向、南向开发环境搭建
获取以上完整鸿蒙HarmonyOS学习资料,请点击→纯血版全套鸿蒙HarmonyOS学习资料
总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。