ts-basic-components-xcomponent.md 4.3 KB
Newer Older
Z
zzzsilenc 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
# XComponent

  > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
  > 该组件从API Version 8 开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

  可用于EGL/OpenGLES和媒体数据写入,并显示在XComponent组件。

## 权限列表



## 子组件

  不支持。

## 接口

  XComponent\(value: {id: string, type: string, libraryname?: string, controller?: XComponentController}\)

  - 参数

    | 名称        | 参数类型                                      | 必填 | 描述                                                         |
    | ----------- | --------------------------------------------- | ---- | ------------------------------------------------------------ |
    | id          | string                                        | 是   | 组件的唯一标识,支持最大的字符串长度128。                    |
25
    | type        | string                                        | 是   | 用于指定XComponent组件类型,可选值为:<br/>-surface:组件内容单独送显,直接合成到屏幕。<br/>-component:组件内容与其他组件合成后统一送显。|
Z
zzzsilenc 已提交
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
    | libraryname | string                                        | 否   | 应用Native层编译输出动态库名称。                             |
    | controller  | [XComponentController](#XComponentController) | 否   | 给组件绑定一个控制器,通过控制器调用组件方法。               |


## 事件

| 名称                            | 功能描述                 |
| ------------------------------- | ------------------------ |
| onLoad(context?: object) => void | 插件加载完成时回调事件。 |
| onDestroy() => void             | 插件卸载完成时回调事件。 |

## XComponentController

xcomponent 组件的控制器,可以将此对象绑定至XComponent组件,然后通过控制器带调用组件方法。

### 创建对象

```
xcomponentController: XComponentController = new XComponentController()
```

### getXComponentSurfaceId

getXComponentSurfaceId(): string

获取XComponent对应Surface的ID,供@ohos接口使用,比如camera相关接口。

  - 返回值

    | 类型   | 描述                        |
    | ------ | --------------------------- |
    | string | XComponent持有Surface的ID。 |

### setXComponentSurfaceSize

setXComponentSurfaceSize(value: {surfaceWidth: number, surfaceHeight: number}): void

设置XComponent持有Surface的宽度和高度。

- 参数

  | 参数名        | 参数类型 | 必填 | 默认值 | 描述                          |
  | ------------- | -------- | ---- | ------ | ----------------------------- |
  | surfaceWidth  | number   | 是   | -      | XComponent持有Surface的宽度。 |
  | surfaceHeight | number   | 是   | -      | XComponent持有Surface的高度。 |

### getXComponentContext

getXComponentContext(): Object

获取XComponent实例对象的context。

- 返回值

  | 类型   | 描述                                                         |
  | ------ | ------------------------------------------------------------ |
  | Object | 获取XComponent实例对象的context,context包含的具体接口方法由开发者自定义。 |

## 示例

86 87
提供surface类型XComponent,支持相机预览等能力。  
示例效果请以真机运行为准,当前IDE预览器不支持。
Z
zzzsilenc 已提交
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117

```
import camera from '@ohos.multimedia.camera';
@Entry
@Component
struct PreviewArea {
  private surfaceId : string =''
  xcomponentController: XComponentController = new XComponentController()
  build() {
    Row() {
      XComponent({
        id: 'xcomponent',
        type: 'surface',
        controller: this.xcomponentController
      })
        .onLoad(() => {
          this.xcomponentController.setXComponentSurfaceSize({surfaceWidth:1920,surfaceHeight:1080});
          this.surfaceId = this.xcomponentController.getXComponentSurfaceId();
          camera.createPreviewOutput(this.surfaceId).then((previewOutput) => {
            console.log('Promise returned with the PreviewOutput instance');
          })
        })
        .width('640px')
        .height('480px')
    }
    .backgroundColor(Color.Black)
    .position({x: 0, y: 48})
  }
}
```