在 Pixel 7 中,最初以纵向打开时面临诸如使用 exoplayer 裁剪视频的问题

问题描述 投票:0回答:1

在 Android Jetpack Compose 中,当使用 Exoplayer 时,当应用程序默认为纵向时,打开媒体播放器时会显示经过裁剪的媒体。但切换到横向并切换回纵向后问题得到解决。

当 Android 视图未设置 fillmaxsize 时,该问题将得到修复。但我需要在 fillmaxsize 中显示它,因为需要在底部放置控制器。

我尝试过使用 AspectRatioFrameLayout 并尝试在初始化时调用 switchToLandscape() 并返回纵向。

android kotlin android-jetpack-compose android-mediaplayer exoplayer
1个回答
0
投票

您在 Jetpack Compose 上以纵向模式使用 ExoPlayer 时遇到的裁剪问题是一个常见的挑战。您可以尝试使用以下几种方法来修复它,同时保持控制器的 fillMaxSize 模式:

  1. 使用
    fitSystemWindows
    修饰符:

此方法利用 Jetpack Compose 中的 fitSystemWindows 修饰符来处理可能导致裁剪的系统栏(如状态栏)。使用以下修改器包装您的 ExoPlayer 可组合项:

Box(modifier = Modifier.fillMaxSize().fitSystemWindows()) {
    // Your ExoPlayer composable here
}
  1. 定制
    AspectRatioFrameLayout

由于 AspectRatioFrameLayout 似乎工作不完美,您可以创建一个继承自 AspectRatioFrameLayout 的自定义可组合项并重写 onMeasure 方法。在 onMeasure 方法中,计算视频的宽高比并相应地缩放视图以适应 fillMaxSize 约束,同时保持宽高比。

  1. 利用 ExoPlayer 听众:

ExoPlayer 提供像 onVideoSizeChanged 这样的监听器,当视频尺寸可用时通知您。您可以使用此侦听器根据视频和视图宽高比计算缩放因子,并将变换矩阵应用于 ExoPlayer 视图以实现所需的拟合。

考虑使用 keepContent 修饰符和 fitSystemWindows 来 防止系统栏调整内容大小。进行实验 AspectRatioFrameLayout 的不同 resizeMode 选项,看看是否有 提供更适合您的场景。请记住,理想的解决方案 可能取决于您的具体实施和视频格式。尝试 这些方法,看看哪一种最适合您的情况。

© www.soinside.com 2019 - 2024. All rights reserved.