# 使用MovingPhotoView播放动态照片 系统提供了MovingPhotoView组件,在一些社交类、图库类应用中,可用于播放动态照片文件。 ## 约束与限制 针对MovingPhotoView组件的使用,有以下约束与限制: - 当前不支持动态属性设置。 - 当前不支持设置ArkUI通用属性[expandSafeArea](../../reference/apis-arkui/arkui-ts/ts-universal-attributes-expand-safe-area.md#expandsafearea)。 - 该组件长按触发播放时组件区域放大为1.1倍。 - 该组件使用[AVPlayer](../../reference/apis-media-kit/js-apis-media.md#avplayer9)进行播放,同时开启的AVPlayer个数不建议超过3个,超过3个可能会出现视频播放卡顿现象。 ## 开发步骤 1. 导入动态照片模块。 ```ts import { MovingPhotoView, MovingPhotoViewController, MovingPhotoViewAttribute } from '@kit.MediaLibraryKit'; ``` 2. 获取动态照片对象([MovingPhoto](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#movingphoto12))。 MovingPhoto对象需要通过photoAccessHelper接口创建或获取,MovingPhotoView只接收构造完成的MovingPhoto对象。 创建、获取的方式可参考[访问和管理动态照片资源](photoAccessHelper-movingphoto.md)。 ```ts src: photoAccessHelper.MovingPhoto | undefined = undefined; ``` 3. 创建动态照片控制器([MovingPhotoViewController](../../reference/apis-media-library-kit/ohos-multimedia-movingphotoview.md#movingphotoviewcontroller)),用于控制动态照片的播放状态(如播放、停止)。 ```ts controller: MovingPhotoViewController = new MovingPhotoViewController(); ``` 4. 创建动态照片组件。 以下参数取值仅为举例,具体每个属性的取值范围,可参考API文档:[@ohos.multimedia.movingphotoview](../../reference/apis-media-library-kit/ohos-multimedia-movingphotoview.md)。 ```ts import { photoAccessHelper, MovingPhotoView, MovingPhotoViewController, MovingPhotoViewAttribute } from '@kit.MediaLibraryKit'; @Entry @Component struct Index { @State src: photoAccessHelper.MovingPhoto | undefined = undefined @State isMuted: boolean = false controller: MovingPhotoViewController = new MovingPhotoViewController(); build() { Column() { MovingPhotoView({ movingPhoto: this.src, controller: this.controller // imageAIOptions: this.options }) // 是否静音播放,此处由按钮控制,默认值为false非静音播放。 .muted(this.isMuted) // 视频显示模式,默认值为Cover。 .objectFit(ImageFit.Cover) // 播放时触发 .onStart(() => { console.log('onStart'); }) // 播放结束触发 .onFinish(() => { console.log('onFinish'); }) // 播放停止触发 .onStop(() => { console.log('onStop') }) // 出现错误触发 .onError(() => { console.log('onError'); }) Row() { // 按钮:开始播放 Button('start') .onClick(() => { this.controller.startPlayback() }) .margin(5) // 按钮:停止播放 Button('stop') .onClick(() => { this.controller.stopPlayback() }) .margin(5) // 按钮:是否静音播放 Button('mute') .onClick(() => { this.isMuted = !this.isMuted }) .margin(5) } .alignItems(VerticalAlign.Center) .justifyContent(FlexAlign.Center) .height('15%') } } } ``` ## 效果展示 ![](figures/moving-photo-view.gif)