文档管理中心
您当前浏览的HarmonyOS 5.0.2(API 14)文档归档不再维护,推荐您使用最新版本。详细请参考文档维护策略变更

拖拽控制

设置组件是否可以响应拖拽事件。

说明

从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

ArkUI框架对以下组件实现了默认的拖拽能力,支持对数据的拖出或拖入响应。开发者也可以通过实现通用拖拽事件来自定义拖拽响应。

Text、TextInput、TextArea、Hyperlink、Image、RichEditor和Web组件的draggable属性默认为true,默认支持拖出能力。其他组件需要开发者将draggable属性设置为true,并在onDragStart等接口中实现数据传输相关内容,才能正确处理拖拽。

说明

Text组件需配合copyOption一起使用,设置copyOptions为CopyOptions.InApp或者CopyOptions.LocalDevice。

allowDrop

allowDrop(value: Array<UniformDataType> | null)

设置该组件上允许落入的数据类型。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

展开
参数名 类型 必填 说明
value Array<UniformDataType> | null12+

设置该组件上允许落入的数据类型。从API version 12开始,允许设置成null使该组件不接受所有的数据类型。

默认值:空

draggable

draggable(value: boolean)

设置该组件是否允许进行拖拽。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

展开
参数名 类型 必填 说明
value boolean

设置该组件是否允许进行拖拽。

默认值:false

dragPreview11+

dragPreview(value: CustomBuilder | DragItemInfo | string)

设置组件拖拽过程中的预览图。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

展开
参数名 类型 必填 说明
value CustomBuilder | DragItemInfo | string12+

设置组件拖拽过程中的预览图,仅在onDragStart拖拽方式中有效。

当组件支持拖拽并同时设置bindContextMenu的预览图时,则长按浮起的预览图以bindContextMenu设置的预览图为准。开发者在onDragStart中返回的背板图优先级低于dragPreview设置的预览图,当设置了dragPreview预览图时,拖拽过程中的背板图使用dragPreview预览图。由于CustomBuilder需要离线渲染之后才能使用,因此存在一定的性能开销和时延,推荐优先使用 DragItemInfo中的PixelMap方式。

当传入类型为string的id时,则将id对应组件的截图作为预览图。如果id对应的组件无法查找到,或者id对应的组件Visibility属性设置成none/hidden,则对组件自身进行截图作为拖拽预览图。目前截图不含有亮度、阴影、模糊和旋转等视觉效果。

默认值:空

dragPreviewOptions11+

dragPreviewOptions(value: DragPreviewOptions, options?: DragInteractionOptions)

设置拖拽过程中背板图处理模式及数量角标的显示。不支持onItemDragStart拖拽方式。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

展开
参数名 类型 必填 说明
value DragPreviewOptions11+

设置拖拽过程中背板图处理模式及数量角标的显示。

默认值:空

options12+ DragInteractionOptions12+

设置拖拽过程中背板图浮起的交互模式。

默认值:空

DragPreviewOptions11+

元服务API: 从API version 12开始,该接口支持在元服务中使用。

展开
名称 类型 必填 描述
mode DragPreviewMode | Array<DragPreviewMode>12+

表示拖拽过程中背板图处理模式。

默认值:DragPreviewMode.AUTO

当组件同时设置DragPreviewMode.AUTO和其它枚举值时,以DragPreviewMode.AUTO为准,其它枚举值设置无效。

numberBadge12+ boolean | number

控制数量角标是否显示,或强制设置显示的数量。当设置数量角标时取值范围为[0,231-1],超过取值范围时会按默认状态处理。当设置为浮点数时,只显示整数部分。

说明:

在多选拖拽场景,需通过该接口设置拖拽对象的数量。

默认值:true

modifier12+ ImageModifier

用于配置拖拽背板图的样式Modifier对象,可使用图片组件所支持的属性和样式来配置背板图样式(参考示例6),当前支持透明度,阴影,背景模糊度,圆角。文本拖拽只支持默认效果,不支持通过modifier进行自定义。

1.透明度

通过opacity设置透明度,不透明度的取值范围为0-1。设置0或不设置时采用默认值0.95,设置1或异常值时不透明。

2.阴影

通过shadow设置阴影。

3.背景模糊度

通过backgroundEffectbackgroundBlurStyle设置背景模糊度,如果两者同时设置,以backgroundEffect为准。

4.圆角

通过borderborderRadius设置圆角,当同时在mode和modifier中设置圆角,mode设置的圆角显示优先级低于modifier设置。

默认值:空,无法修改属性

DragPreviewMode11+枚举说明

元服务API: 从API version 12开始,该接口支持在元服务中使用。

展开
名称 枚举值 描述
AUTO 1 系统根据拖拽场景自动改变跟手点位置,根据规则自动对拖拽背板图进行缩放变换等。
DISABLE_SCALE 2 禁用系统对拖拽背板图的缩放行为。
ENABLE_DEFAULT_SHADOW12+ 3 启用非文本类组件默认阴影效果。
ENABLE_DEFAULT_RADIUS12+ 4 启用非文本类组件统一圆角效果,默认值12vp。当应用自身设置的圆角值大于默认值或modifier设置的圆角时,则显示应用自定义圆角效果。

DragInteractionOptions12+

元服务API: 从API version 12开始,该接口支持在元服务中使用。

展开
名称 类型 必填 描述
isMultiSelectionEnabled boolean

表示拖拽过程中背板图是否支持多选聚拢效果。该参数只在GridList组件中的GridItem组件和ListItem组件生效。

当一个item组件设置为多选拖拽时,该组件的子组件不可拖拽。聚拢组件预览图设置的优先级为dragPreview中的string,dragPreview中的PixelMap,组件自截图,不支持dragPreview中的Builder形式。

不支持组件绑定bindContextMenu中参数存在isShown的模式。

默认值:false

defaultAnimationBeforeLifting boolean

表示是否启用长按浮起阶段组件自身的默认点按效果(缩小)。

默认值:false

示例

示例1(允许拖拽和落入)

该示例通过配置allowDrop和draggable分别设置组件是否可落入和拖拽。

收起
自动换行
深色代码主题
复制
  1. // xxx.ets
  2. import { unifiedDataChannel, uniformTypeDescriptor } from '@kit.ArkData';
  3. @Entry
  4. @Component
  5. struct ImageExample {
  6. @State uri: string = ""
  7. @State AblockArr: string[] = []
  8. @State BblockArr: string[] = []
  9. @State AVisible: Visibility = Visibility.Visible
  10. @State dragSuccess :Boolean = false
  11. build() {
  12. Column() {
  13. Text('Image拖拽')
  14. .fontSize('30dp')
  15. Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.SpaceAround }) {
  16. Image($r('app.media.icon'))
  17. .width(100)
  18. .height(100)
  19. .border({ width: 1 })
  20. .visibility(this.AVisible)
  21. .draggable(true)
  22. .onDragEnd((event: DragEvent) => {
  23. let ret = event.getResult();
  24. if(ret == 0) {
  25. console.log("enter ret == 0")
  26. this.AVisible = Visibility.Hidden;
  27. } else {
  28. console.log("enter ret != 0")
  29. this.AVisible = Visibility.Visible;
  30. }
  31. })
  32. }
  33. .margin({ bottom: 20 })
  34. Row() {
  35. Column(){
  36. Text('不允许释放区域')
  37. .fontSize('15dp')
  38. .height('10%')
  39. List(){
  40. ForEach(this.AblockArr, (item:string, index) => {
  41. ListItem() {
  42. Image(item)
  43. .width(100)
  44. .height(100)
  45. .border({width: 1})
  46. }
  47. .margin({ left: 30 , top : 30})
  48. }, (item:string) => item)
  49. }
  50. .height('90%')
  51. .width('100%')
  52. .allowDrop([uniformTypeDescriptor.UniformDataType.TEXT])
  53. .onDrop((event?: DragEvent, extraParams?: string) => {
  54. this.uri = JSON.parse(extraParams as string).extraInfo;
  55. this.AblockArr.splice(JSON.parse(extraParams as string).insertIndex, 0, this.uri);
  56. console.log("ondrop not udmf data");
  57. })
  58. .border({width: 1})
  59. }
  60. .height("50%")
  61. .width("45%")
  62. .border({ width: 1 })
  63. .margin({ left: 12 })
  64. Column(){
  65. Text('可释放区域')
  66. .fontSize('15dp')
  67. .height('10%')
  68. List(){
  69. ForEach(this.BblockArr, (item:string, index) => {
  70. ListItem() {
  71. Image(item)
  72. .width(100)
  73. .height(100)
  74. .border({width: 1})
  75. }
  76. .margin({ left: 30 , top : 30})
  77. }, (item:string) => item)
  78. }
  79. .border({width: 1})
  80. .height('90%')
  81. .width('100%')
  82. .allowDrop([uniformTypeDescriptor.UniformDataType.IMAGE])
  83. .onDrop((event?: DragEvent, extraParams?: string) => {
  84. console.log("enter onDrop")
  85. let dragData:UnifiedData = (event as DragEvent).getData() as UnifiedData;
  86. if(dragData != undefined) {
  87. let arr:Array<unifiedDataChannel.UnifiedRecord> = dragData.getRecords();
  88. if(arr.length > 0) {
  89. let image = arr[0] as unifiedDataChannel.Image;
  90. this.uri = image.imageUri;
  91. this.BblockArr.splice(JSON.parse(extraParams as string).insertIndex, 0, this.uri);
  92. } else {
  93. console.log(`dragData arr is null`)
  94. }
  95. } else {
  96. console.log(`dragData is undefined`)
  97. }
  98. console.log("ondrop udmf data");
  99. this.dragSuccess = true
  100. })
  101. }
  102. .height("50%")
  103. .width("45%")
  104. .border({ width: 1 })
  105. .margin({ left: 12 })
  106. }
  107. }.width('100%')
  108. }
  109. }

示例2(设置预览图)

该示例通过配置dragPreview设置拖拽过程的预览图。

收起
自动换行
深色代码主题
复制
  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct DragPreviewDemo{
  5. @Builder dragPreviewBuilder() {
  6. Column() {
  7. Text("dragPreview")
  8. .width(150)
  9. .height(50)
  10. .fontSize(20)
  11. .borderRadius(10)
  12. .textAlign(TextAlign.Center)
  13. .fontColor(Color.Black)
  14. .backgroundColor(Color.Pink)
  15. }
  16. }
  17. @Builder MenuBuilder() {
  18. Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) {
  19. Text("menu item 1")
  20. .fontSize(15)
  21. .width(100)
  22. .height(40)
  23. .textAlign(TextAlign.Center)
  24. .fontColor(Color.Black)
  25. .backgroundColor(Color.Pink)
  26. Divider()
  27. .height(5)
  28. Text("menu item 2")
  29. .fontSize(15)
  30. .width(100)
  31. .height(40)
  32. .textAlign(TextAlign.Center)
  33. .fontColor(Color.Black)
  34. .backgroundColor(Color.Pink)
  35. }
  36. .width(100)
  37. }
  38. build() {
  39. Row() {
  40. Column() {
  41. Image('/resource/image.jpeg')
  42. .width("30%")
  43. .draggable(true)
  44. .bindContextMenu(this.MenuBuilder, ResponseType.LongPress)
  45. .onDragStart(() => {
  46. console.log("Image onDragStart")
  47. })
  48. .dragPreview(this.dragPreviewBuilder)
  49. }
  50. .width("100%")
  51. }
  52. .height("100%")
  53. }
  54. }

示例3(设置背板图样式)

该示例通过配置dragPreviewOptions为ENABLE_DEFAULT_SHADOW和ENABLE_DEFAULT_RADIUS设置默认阴影和统一圆角效果。

收起
自动换行
深色代码主题
复制
  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct dragPreviewOptionsDemo{
  5. build() {
  6. Row() {
  7. Column() {
  8. Image('/resource/image.jpeg')
  9. .margin({ top: 10 })
  10. .width("100%")
  11. .draggable(true)
  12. .dragPreviewOptions({ mode: DragPreviewMode.AUTO })
  13. Image('/resource/image.jpeg')
  14. .margin({ top: 10 })
  15. .width("80%")
  16. .border({ radius: { topLeft: 1, topRight: 2, bottomLeft: 4, bottomRight: 8 } })
  17. .draggable(true)
  18. .dragPreviewOptions({ mode: [ DragPreviewMode.ENABLE_DEFAULT_SHADOW, DragPreviewMode.ENABLE_DEFAULT_RADIUS ] })
  19. }
  20. .width("100%")
  21. .height("100%")
  22. }
  23. }
  24. }

示例4(设置多选拖拽)

该示例通过配置isMultiSelectionEnabled实现Grid组件的多选拖拽效果。

收起
自动换行
深色代码主题
复制
  1. @Entry
  2. @Component
  3. struct Example {
  4. @State numbers: number[] = [0, 1, 2, 3, 4 , 5, 6, 7, 8]
  5. build() {
  6. Column({ space: 5}) {
  7. Grid() {
  8. ForEach(this.numbers, (item: number) => {
  9. GridItem() {
  10. Column()
  11. .backgroundColor(Color.Blue)
  12. .width('100%')
  13. .height('100%')
  14. }
  15. .width(90)
  16. .height(90)
  17. .selectable(true)
  18. .selected(true)
  19. .dragPreviewOptions({}, {isMultiSelectionEnabled:true})
  20. .onDragStart(()=>{
  21. })
  22. }, (item: string) => item)
  23. }
  24. .columnsTemplate('1fr 1fr 1fr')
  25. .rowsTemplate('1fr 1fr 1fr')
  26. .height(300)
  27. }
  28. .width('100%')
  29. }
  30. }

示例5(设置默认点按效果)

该示例通过配置defaultAnimationBeforeLifting实现Grid组件的默认点按效果。

收起
自动换行
深色代码主题
复制
  1. @Entry
  2. @Component
  3. struct Example {
  4. @State numbers: number[] = [0, 1, 2, 3, 4 , 5, 6, 7, 8]
  5. build() {
  6. Column({ space: 5}) {
  7. Grid() {
  8. ForEach(this.numbers, (item: number) => {
  9. GridItem() {
  10. Column()
  11. .backgroundColor(Color.Blue)
  12. .width('100%')
  13. .height('100%')
  14. }
  15. .width(90)
  16. .height(90)
  17. .selectable(true)
  18. .selected(true)
  19. .dragPreviewOptions({}, {isMultiSelectionEnabled:true, defaultAnimationBeforeLifting:true})
  20. .onDragStart(()=>{
  21. })
  22. }, (item: string) => item)
  23. }
  24. .columnsTemplate('1fr 1fr 1fr')
  25. .rowsTemplate('1fr 1fr 1fr')
  26. .height(300)
  27. }
  28. .width('100%')
  29. }
  30. }

示例6(自定义背板图样式)

该示例通过配置ImageModifier实现Image组件的自定义背板图样式。

收起
自动换行
深色代码主题
复制
  1. // xxx.ets
  2. import { ImageModifier } from '@kit.ArkUI'
  3. @Entry
  4. @Component
  5. struct dragPreviewOptionsDemo{
  6. @State myModifier: ImageAttribute = new ImageModifier().opacity(0.5)
  7. @State vis: boolean = true
  8. @State changeValue: string = ''
  9. @State submitValue: string = ''
  10. @State positionInfo: CaretOffset = { index: 0, x: 0, y: 0 }
  11. controller: SearchController = new SearchController()
  12. @State OpacityIndex: number = 0
  13. @State OpacityList:(number | undefined | null)[]=[
  14. 0.3,0.5,0.7,1,-50,0,10,undefined,null
  15. ]
  16. build() {
  17. Row() {
  18. Column() {
  19. Text(this.OpacityList[this.OpacityIndex] + "")
  20. Button("Opacity")
  21. .onClick(()=> {
  22. this.OpacityIndex++
  23. if(this.OpacityIndex > this.OpacityList.length - 1){
  24. this.OpacityIndex = 0
  25. }
  26. })
  27. Image($r('app.media.image'))
  28. .margin({ top: 10 })
  29. .width("100%")
  30. .draggable(true)
  31. .dragPreviewOptions({modifier: this.myModifier.opacity(this.OpacityList[this.OpacityIndex]) as ImageModifier})
  32. }
  33. .width("50%")
  34. .height("50%")
  35. }
  36. }
  37. }

示例7(图片拖拽设置)

该示例展示了不同图片(在线图片资源、本地图片资源和PixelMap)在拖拽时组件的设置。

使用网络图片时,需要申请权限ohos.permission.INTERNET。具体申请方式请参考声明权限

收起
自动换行
深色代码主题
复制
  1. // xxx.ets
  2. import { uniformTypeDescriptor, unifiedDataChannel } from '@kit.ArkData';
  3. import { image } from '@kit.ImageKit';
  4. import { request } from '@kit.BasicServicesKit';
  5. import { common } from '@kit.AbilityKit';
  6. import { fileIo } from '@kit.CoreFileKit';
  7. import { buffer } from '@kit.ArkTS';
  8. import { BusinessError } from '@kit.BasicServicesKit';
  9. @Entry
  10. @Component
  11. struct ImageDrag {
  12. @State targetImage1: string | PixelMap | null = null;
  13. @State targetImage2: string | PixelMap | null = null;
  14. @State targetImage3: string | PixelMap | null = null;
  15. context = getContext(this) as common.UIAbilityContext;
  16. filesDir = this.context.filesDir;
  17. public async createPixelMap(pixelMap: unifiedDataChannel.SystemDefinedPixelMap): Promise<image.PixelMap | null> {
  18. let mWidth: number = (pixelMap.details?.width ?? -1) as number;
  19. let mHeight: number = (pixelMap.details?.width ?? -1) as number;
  20. let mPixelFormat: image.PixelMapFormat =
  21. (pixelMap.details?.['pixel-format'] ?? image.PixelMapFormat.UNKNOWN) as image.PixelMapFormat;
  22. let mItemPixelMapData: Uint8Array = pixelMap.rawData;
  23. const opts: image.InitializationOptions = {
  24. editable: false, pixelFormat: mPixelFormat, size: {
  25. height: mHeight,
  26. width: mWidth
  27. }
  28. };
  29. const buffer: ArrayBuffer = mItemPixelMapData.buffer.slice(mItemPixelMapData.byteOffset,
  30. mItemPixelMapData.byteLength + mItemPixelMapData.byteOffset);
  31. try {
  32. let pixelMap: image.PixelMap = await image.createPixelMap(buffer, opts);
  33. return pixelMap;
  34. } catch (err) {
  35. console.error('dragtest--> getPixelMap', err);
  36. return null;
  37. }
  38. }
  39. build() {
  40. Column() {
  41. Flex({ direction: FlexDirection.Row, justifyContent: FlexAlign.Center }) {
  42. // 在线图片资源拖出
  43. Column() {
  44. Text('Online Image').fontSize(14)
  45. Image('https://www.example.com/xxx.png') // 请填写一个具体的网络图片地址
  46. .objectFit(ImageFit.Contain).draggable(true)
  47. .onDragStart(() => {})
  48. .width(100).height(100)
  49. }
  50. .border({ width: 2, color: Color.Gray, radius: 5, style: BorderStyle.Dotted })
  51. .alignItems(HorizontalAlign.Center).justifyContent(FlexAlign.Center)
  52. // 本地图片资源拖出
  53. Column() {
  54. Text('Local Image').fontSize(14)
  55. Image($r('app.media.example'))
  56. .objectFit(ImageFit.Contain).draggable(true)
  57. .onDragStart(() => {})
  58. .width(100).height(100)
  59. }
  60. .border({ width: 2, color: Color.Gray, radius: 5, style: BorderStyle.Dotted })
  61. .alignItems(HorizontalAlign.Center).justifyContent(FlexAlign.Center)
  62. // PixelMap拖出
  63. Column() {
  64. Text('PixelMap').fontSize(14)
  65. Image(this.context.resourceManager.getDrawableDescriptor($r('app.media.example').id).getPixelMap())
  66. .objectFit(ImageFit.Contain).draggable(true)
  67. .onDragStart(() => {})
  68. .width(100).height(100)
  69. }
  70. .border({ width: 2, color: Color.Gray, radius: 5, style: BorderStyle.Dotted })
  71. .alignItems(HorizontalAlign.Center).justifyContent(FlexAlign.Center)
  72. }
  73. // 落入数据类型为Image
  74. Text('Data type is Image').fontSize(14).margin({ top: 10 })
  75. Column() {
  76. Image(this.targetImage1)
  77. .objectFit(ImageFit.Contain)
  78. .width('70%').height('70%')
  79. .allowDrop([uniformTypeDescriptor.UniformDataType.IMAGE])
  80. .onDrop((event: DragEvent, extraParams: string) => {
  81. // 通过extraParams获取图片
  82. let arr: Record<string, object> = JSON.parse(extraParams) as Record<string, object>;
  83. let uri = arr['extraInfo'];
  84. if (typeof uri == 'string') {
  85. this.targetImage1 = uri;
  86. try {
  87. request.downloadFile(this.context, {
  88. url: uri,
  89. filePath: this.filesDir + '/example.png'
  90. }).then((downloadTask: request.DownloadTask) => {
  91. let file = fileIo.openSync(this.filesDir + '/example.png', fileIo.OpenMode.READ_WRITE);
  92. let arrayBuffer = new ArrayBuffer(1024);
  93. let readLen = fileIo.readSync(file.fd, arrayBuffer);
  94. let buf = buffer.from(arrayBuffer, 0, readLen);
  95. console.info(`The content of file: ${buf.toString()}`);
  96. fileIo.closeSync(file);
  97. })
  98. } catch (error) {}
  99. }
  100. })
  101. }
  102. .width('70%').height('25%')
  103. .border({ width: 2, color: Color.Gray, radius: 5, style: BorderStyle.Dotted })
  104. .alignItems(HorizontalAlign.Center).justifyContent(FlexAlign.Center)
  105. Column() {
  106. Image(this.targetImage2)
  107. .objectFit(ImageFit.Contain)
  108. .width('70%').height('70%')
  109. .allowDrop([uniformTypeDescriptor.UniformDataType.IMAGE])
  110. .onDrop((event: DragEvent, extraParams: string) => {
  111. // 通过uniformTypeDescriptor获取图片
  112. let data: UnifiedData = event.getData();
  113. let records: Array<unifiedDataChannel.UnifiedRecord> = data.getRecords();
  114. if (records[0].getType() ===uniformTypeDescriptor.UniformDataType.IMAGE) {
  115. let image: unifiedDataChannel.Image = records[0] as unifiedDataChannel.Image;
  116. this.targetImage2 = image.imageUri;
  117. }
  118. })
  119. }
  120. .width('70%').height('25%')
  121. .border({ width: 2, color: Color.Gray, radius: 5, style: BorderStyle.Dotted })
  122. .alignItems(HorizontalAlign.Center).justifyContent(FlexAlign.Center)
  123. // 落入数据类型为PixelMap
  124. Text('Data type is PixelMap').fontSize(14).margin({ top: 10 })
  125. Column() {
  126. Image(this.targetImage3)
  127. .objectFit(ImageFit.Contain)
  128. .width('70%').height('70%')
  129. .allowDrop([uniformTypeDescriptor.UniformDataType.OPENHARMONY_PIXEL_MAP])
  130. .onDrop(async (event: DragEvent, extraParams: string) => {
  131. // 通过uniformTypeDescriptor获取图片
  132. let data: UnifiedData = event.getData();
  133. let records: Array<unifiedDataChannel.UnifiedRecord> = data.getRecords();
  134. if (records[0].getType() ===uniformTypeDescriptor.UniformDataType.OPENHARMONY_PIXEL_MAP) {
  135. let record: unifiedDataChannel.SystemDefinedPixelMap = records[0] as unifiedDataChannel.SystemDefinedPixelMap;
  136. this.targetImage3 = await this.createPixelMap(record);
  137. // 落盘到本地
  138. const imagePackerApi = image.createImagePacker();
  139. let packOpts : image.PackingOption = { format: "image/jpeg", quality:98 };
  140. const path : string = this.context.cacheDir + "/pixel_map.jpg";
  141. let file = fileIo.openSync(path, fileIo.OpenMode.CREATE | fileIo.OpenMode.READ_WRITE);
  142. imagePackerApi.packToFile(this.targetImage3, file.fd, packOpts).then(() => {
  143. // 直接打包进文件
  144. }).catch((error : BusinessError) => {
  145. console.error('Failed to pack the image. And the error is: ' + error);
  146. })
  147. }
  148. })
  149. }
  150. .width('70%').height('25%')
  151. .border({ width: 2, color: Color.Gray, radius: 5, style: BorderStyle.Dotted })
  152. .alignItems(HorizontalAlign.Center).justifyContent(FlexAlign.Center)
  153. }.width('100%').height('100%')
  154. }
  155. }

在 API参考 中进行搜索
请输入您想要搜索的关键词