HarmonyOS 鸿蒙Next Video组件调用requestFullscreen实现全屏播放后,自定义的控制栏无法显示

HarmonyOS 鸿蒙Next Video组件调用requestFullscreen实现全屏播放后,自定义的控制栏无法显示

操作步骤:
1、使用Video加载视频,并设置controls为false,onFullscreenChange监听里进行横竖屏切换
2、自定义控制栏,点击按钮调用this.controller.requestFullscreen(true)
3.视频成功全屏,但自定义控制栏未显示

 

2 回复

Video组件全屏的原理是,新建一个Video节点,设置为窗口大小,放置到根节点,复用原来Video的surface。这可以通过ide的ArkUI Inspector观察Video组件全屏前后页面节点的变化发现,这个原理在ets侧是不能模仿实现的。总的来说Video组件自带的全屏就不适用了。需要自定义实现全屏。

我们可以给视频展示区一个高度,通过调整尺寸实现全屏的效果,同时也可以显示自定义的播放控件,这边给您提供一个demo,供您参考:

@Entry

@Component

struct VideoPlayerPage {

  @State videoSrc: Resource = $r("app.media.videoTest")

  @State previewUri: Resource = $r('app.media.background');

  controller: VideoController = new VideoController();

  @State curRate: PlaybackSpeed = PlaybackSpeed.Speed_Forward_1_00_X

  @State fullHeight: Length = 600

  @State isFullScreen: boolean = false

  build() {

    Column() {

      Stack({ alignContent: Alignment.Bottom }) {

        Video({ src: this.videoSrc, previewUri: this.previewUri, controller: this.controller })

          .width('100%')

          .height(this.fullHeight)

          .loop(false)

          .objectFit(ImageFit.Contain)

          .autoPlay(false)

          .controls(false)

        // 自定义控制器

        Row() {

          Text('start')

            .onClick(() => {

              this.controller.start() // 开始播放

            })

            .margin(5)

            .fontColor(Color.White)

          Text('pause')

            .onClick(() => {

              this.controller.pause() // 暂停播放

            }).margin(5)

            .fontColor(Color.White)

          Text('0.75')

            .onClick(() => {

              this.curRate = PlaybackSpeed.Speed_Forward_0_75_X // 0.75倍速播放

            })

            .margin(5)

            .fontColor(Color.White)

          Text('1')

            .onClick(() => {

              this.curRate = PlaybackSpeed.Speed_Forward_1_00_X // 原倍速播放

            })

            .margin(5)

            .fontColor(Color.White)

          Text('2')

            .onClick(() => {

              this.curRate = PlaybackSpeed.Speed_Forward_2_00_X // 2倍速播放

            })

            .margin(5)

            .fontColor(Color.White)

          Text(this.isFullScreen ? '退出全屏' : '全屏')

            .onClick(() => {

              if (this.isFullScreen) {

                this.fullHeight = 600

              } else {

                this.fullHeight = '100%'

              }

              this.isFullScreen = !this.isFullScreen

            })

            .fontColor(Color.White)

        }

        .zIndex(1)

      }

    }

    .width('100%')

    .height('100%')

    .justifyContent(FlexAlign.Center)

  }

}

更多关于HarmonyOS 鸿蒙Next Video组件调用requestFullscreen实现全屏播放后,自定义的控制栏无法显示的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,使用Next Video组件调用requestFullscreen方法实现全屏播放后,自定义控制栏无法显示的问题,通常是由于全屏模式下视图层级或焦点管理变化导致的。以下是可能的原因及解决思路:

  1. 视图层级调整:在全屏模式下,视频组件可能会覆盖或改变原有的视图层级,导致自定义控制栏被遮挡或不在可见区域内。检查并调整视图层级,确保控制栏在全屏模式下仍位于视频组件之上且可见。

  2. 焦点管理:全屏播放时,焦点可能完全转移到了视频组件上,导致自定义控制栏无法接收事件。尝试在全屏模式下通过编程方式设置控制栏的焦点或可见性。

  3. 全屏回调处理:监听全屏播放的回调事件,在进入或退出全屏状态时动态调整控制栏的显示状态。

  4. 样式与布局:检查控制栏的样式和布局设置,确保在全屏和非全屏模式下都能正确显示。

  5. 文档与示例:参考HarmonyOS官方文档和示例代码,了解全屏播放的最佳实践和控制栏的显示管理。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部