# 使用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%') } } } ``` ## 效果展示 