视频超出 Android 中 VideoView 的范围

video extending past the bounds of a VideoView in Android

我目前正在处理一些遗留代码,这些代码以前在应用程序中用作弹出窗口,显示图像和一些文本。我正在更改布局,将其从 ImageView 更改为 VideoView,以使其显示视频。我已将视频视图设置为仅跨越屏幕的特定部分,但视频并未停留在这些范围内。它按照预期从这些边界的左上角开始,但在所有其他方向和屏幕的底部和右边缘跨越它。

Here is the layout view from Android Studio, The red line shows how the video is showing. It should stay (scale?) within the square video view where the top left corner of the video begins

遗留代码使用一个 ImageView 与另一个 ImageView 并排放置,以构成弹出窗口。这些元素的父元素是 PercentRelativeLayout。我尝试添加另一个相对布局,即弹出窗口的总大小,然后在其中添加视频和图像视图(结构:百分比(全屏)->百分比(弹出窗口大小)->视频(父级的左半部分) & 图像(父级的右半部分))。视频仍在延伸越界。 我也尝试过使用 Constraint Layouts 而不是 Percent 布局,但没有效果。 我 运行 在使用相同 OS 但更快的硬件的不同设备上使用相同的代码,并且代码按预期工作。 除了设置视频源之外,我不会在代码中更改视频视图。

<android.support.percent.PercentFrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent"
    tools:context="com.my.package.questionnaire.fragments.InterestQuestionFragment">

    <android.support.percent.PercentRelativeLayout
        android:layout_gravity="center"
        app:layout_aspectRatio="177%"
        app:layout_widthPercent="100%">

        <android.support.percent.PercentRelativeLayout
            android:background="#000000"
            app:layout_heightPercent="64%"
            app:layout_marginStartPercent="13%"
            app:layout_marginTopPercent="18%"
            app:layout_widthPercent="74%">

            <ImageView
                android:src="@drawable/info_popup_background"
                app:layout_heightPercent="100%"
                app:layout_marginStartPercent="50%"
                app:layout_widthPercent="50%" />

            <VideoView
                android:id="@+id/info_popup_accessory_video_view"
                app:layout_heightPercent="100%"
                app:layout_widthPercent="50%" />

        </android.support.percent.PercentRelativeLayout>

    </android.support.percent.PercentRelativeLayout>

</android.support.percent.PercentFrameLayout>

预期结果是视频保持在 VideoView 的范围内。视频不大,应该已经与我正在创建的 VideoView 大小相当。它似乎被拉长了,但实际上不应该。

以防万一其他人遇到这个问题,我将列出我找到的解决方案。 事实证明,这个问题出现在 Android 4.4.2 而不是 4.4.4。为了找到解决这个问题的方法,我求助于 scalableVideoView 库,它本质上只是 mediaPlayer 的轻型包装器,它通过视频侦听器更改其 textureView,可以在以下位置找到 https://github.com/yqritc/Android-ScalableVideoView.

这在 textureView 中使用了 MediaPlayer。 该库修复了视频缩放问题,但引入了一个不同的记录错误,该错误会在发布媒体播放器时冻结应用程序。 https://issuetracker.google.com/issues/36905656

为了解决这个问题,我潜入了库并剥离了 MediaPlayer 和所有相关的监听器和方法,并实现了 Google 的 ExoPlayer。现在的图书馆完全不一样了,大家有兴趣的话,我可以提供。

现在,一切都按预期工作,没有缩放或冻结问题。

如果有人想看这方面的代码,请告诉我,我可以详细说明!