• Lv0
    粉丝4

积分341 / 贡献0

提问49答案被采纳13文章1

如何自定义Video组件控制栏样式

westinyang

沙发 发表于 2023-10-31 11:14:43

首先设置 .controls(false) 隐藏默认控制栏,定义 controller: VideoController = new VideoController(),在初始化Video组件的时候传递给controller属性,然后用ArkUI自定义一个控制栏布局,给自定义控制栏布局中的按钮添加相应的单击事件,分别调用this.controller.start()|pause()|stop()|requestFullscreen()...等接口控制视频组件

清风明月

板凳 发表于 2023-11-9 09:38:34
1.通过设置属性controls为false关闭默认控制栏。
2.设置Video组件的controller。
3.通过ArkTS实现自定义的控制栏,并通过VideoController控制视频播放。
  1. // xxx.ets
  2. @Entry@Componentstruct VideoCreateComponent {
  3.   @State videoSrc: Resource = $rawfile('video1.mp4')
  4.   @State previewUri: Resource = $r('app.media.poster1')
  5.   @State curRate: PlaybackSpeed = PlaybackSpeed.Speed_Forward_1_00_X
  6.   @State isAutoPlay: boolean = false
  7.   @State showControls: boolean = true
  8.   controller: VideoController = new VideoController()
  9.    build() {
  10.     Column() {
  11.       Video({
  12.         src: this.videoSrc,
  13.         previewUri: this.previewUri,
  14.         currentProgressRate: this.curRate,
  15.         controller: this.controller
  16.       }).width('100%').height(600)
  17.         .autoPlay(this.isAutoPlay)
  18.         .controls(this.showControls)
  19.         .onStart(() => {
  20.           console.info('onStart')
  21.         })
  22.         .onPause(() => {
  23.           console.info('onPause')
  24.         })
  25.         .onFinish(() => {
  26.           console.info('onFinish')
  27.         })
  28.         .onError(() => {
  29.           console.info('onError')
  30.         })
  31.         .onPrepared((e) => {
  32.           console.info('onPrepared is ' + e.duration)
  33.         })
  34.         .onSeeking((e) => {
  35.           console.info('onSeeking is ' + e.time)
  36.         })
  37.         .onSeeked((e) => {
  38.           console.info('onSeeked is ' + e.time)
  39.         })
  40.         .onUpdate((e) => {
  41.           console.info('onUpdate is ' + e.time)
  42.         })
  43.              Row() {
  44.         Button('src').onClick(() => {
  45.           this.videoSrc = $rawfile('video2.mp4') // 切换视频源
  46.         }).margin(5)
  47.         Button('previewUri').onClick(() => {
  48.           this.previewUri = $r('app.media.poster2') // 切换视频预览海报
  49.         }).margin(5)

  50.         Button('controls').onClick(() => {
  51.           this.showControls = !this.showControls // 切换是否显示视频控制栏
  52.         }).margin(5)
  53.       }
  54.        Row() {
  55.         Button('start').onClick(() => {
  56.           this.controller.start() // 开始播放
  57.         }).margin(5)
  58.         Button('pause').onClick(() => {
  59.           this.controller.pause() // 暂停播放
  60.         }).margin(5)
  61.         Button('stop').onClick(() => {
  62.           this.controller.stop() // 结束播放
  63.         }).margin(5)
  64.         Button('setTime').onClick(() => {
  65.           this.controller.setCurrentTime(10, SeekMode.Accurate) // 精准跳转到视频的10s位置
  66.         }).margin(5)
  67.       }
  68.        Row() {
  69.         Button('rate 0.75').onClick(() => {
  70.           this.curRate = PlaybackSpeed.Speed_Forward_0_75_X // 0.75倍速播放
  71.         }).margin(5)
  72.         Button('rate 1').onClick(() => {
  73.           this.curRate = PlaybackSpeed.Speed_Forward_1_00_X // 原倍速播放
  74.         }).margin(5)
  75.         Button('rate 2').onClick(() => {
  76.           this.curRate = PlaybackSpeed.Speed_Forward_2_00_X // 2倍速播放
  77.         }).margin(5)
  78.       }
  79.     }
  80.   }}
复制代码

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部