该组件从API version 8 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
用于显示写入了EGL/OpenGLES或媒体数据的组件,支持surface(内容单独送显,直接合成到屏幕)和component(与其他组件合成后统一送显)两种类型,适用于相机预览等需要显示EGL/OpenGLES渲染内容或媒体数据的场景。
除支持通用属性外,还支持如下属性:
| 名称 | 参数类型 | 必填 | 描述 |
|---|---|---|---|
| id | string | 是 | 组件的唯一标识,最大字符串长度为128。 |
| type | string | 是 | 用于指定xcomponent组件类型,可选值为: - surface:组件内容单独送显,直接合成到屏幕,适用于相机预览、视频播放等场景。 - component:组件内容与其他组件合成后统一送显,适用于需要与其他组件混合显示的场景。 |
| libraryname | string | 否 | 应用Native层编译输出动态库名称。设置后组件加载该动态库,库中注册的方法可通过onLoad回调的context或getXComponentContext在JS侧调用;不设置时不加载动态库。 |
除支持通用事件外,还支持如下事件:
| 名称 | 功能描述 |
|---|---|
| onLoad(context?: object) => void | 插件(通过libraryname属性加载的Native动态库)加载完成时回调事件。 context:开发者扩展的xcomponent方法的实例对象,context对象的接口由开发者自定义。 |
| onDestroy() => void | 插件销毁完成时回调事件。 |
除支持通用方法外,还支持如下方法:
| 名称 | 参数 | 返回值类型 | 描述 |
|---|---|---|---|
| getXComponentSurfaceId | - | string | 获取xcomponent对应Surface的ID,供@ohos接口使用,比如camera相关接口。需在onLoad回调后调用。 |
| setXComponentSurfaceSize | { surfaceWidth: number, surfaceHeight: number } | - | 设置xcomponent持有Surface的宽度和高度,单位为px。需在onLoad回调后调用。 |
| getXComponentContext | - | object | 获取开发者扩展的xcomponent方法的实例对象,该对象的接口由开发者自定义。需先设置libraryname属性。 |
提供surface类型xcomponent,支持相机预览等能力。
<!-- xxx.hml -->
<div style="height: 500px; width: 500px; flex-direction: column; justify-content: center; align-items: center;">
<text id = 'camera' class = 'title'>camera_display</text>
<xcomponent id = 'xcomponent' type = 'surface' onload = 'onload' ondestroy = 'ondestroy'></xcomponent>
</div> // xxx.js
import camera from '@ohos.multimedia.camera';
export default {
onload() {
var surfaceId = this.$element('xcomponent').getXComponentSurfaceId();
camera.createPreviewOutput(surfaceId).then((previewOutput) => {
console.info('Promise returned with the PreviewOutput instance');
});
},
ondestroy() {
}
}