Как сохранить пропорции моего Android VideoView только пропорционально его высоте? - PullRequest
0 голосов
/ 18 июня 2019

Я хочу установить видео, которое заполняет экран и сохраняет его соотношение сторон. Однако я не хочу, чтобы видео соответствовало формату экрана телефона.

Если соотношение сторон моего экрана составляет 18,9: 9, а соотношение сторон видео - 16: 9, тогда видео появляется растянуто, когда я помещаю его в VideoView, который наследует fill_parent. Если я не установлю fill_parent, то видео сохраняет свое соотношение сторон, но занимает только 1/3 экрана, потому что соотношение сторон определяется его шириной, а не высотой. Это не желательно.

Я хочу заполнить экран видео вертикально, независимо от того, вырезана ли часть ширины.

Текущий код:

window.setFormat(PixelFormat.TRANSLUCENT)
val videoView = findViewById < VideoView > (videoView)
val video = Uri.parse("android.resource://" + packageName + "/" +
    R.raw.bgvideo)
videoView.setVideoURI(video)
videoView.setOnPreparedListener {
    mp: MediaPlayer - >
        mp.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING)
    mp.isLooping = true
    mp.setScreenOnWhilePlaying(false)
}
videoView.start()

XML:

<VideoView
    android:id="@+id/videoView"
    android:layout_width="2000dp"
    android:layout_height="match_parent" />

<!--- Sample Foreground Content !--->
<ImageView
    android:layout_width="wrap_content"
    android:layout_height="250dp"
    android:layout_gravity="center_horizontal"
    android:layout_marginBottom="24dp"
    android:contentDescription="@string/logo"
    android:src="@drawable/logo" />

Текущий результат:

enter image description here

Желаемый результат: enter image description here

1 Ответ

1 голос
/ 18 июня 2019

Настройте размер VideoView программно.

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <!--parent needs to be matching the screen height-->
    <!--VideoView layout_width doesn't matter-->

    <VideoView
        android:id="@+id/video_player"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</FrameLayout>
// at onCreate or anywhere

        // post, because view dimension is not initialized yet in here
        videoView.post(new Runnable() {
            @Override
            public void run() {
                // do resizing here
                // AR = aspect ratio

                float videoARWidth = 16.f;
                float videoARHeight = 9.f;

                // Phone screen aspect ratio height
                float screenARHeight = 9.f;

                // scale to screen AR height
                float videoScale = screenARHeight / videoARHeight;

                float videoARRatio = videoARWidth / videoARHeight;

                // scale the ratio to screen
                float videoScaledARRatio = videoARRatio * videoScale;

                ViewGroup.LayoutParams layoutParams = videoView.getLayoutParams();

                // make sure the VideoView matches the screen height
                layoutParams.width = (int)(videoView.getHeight() * videoScaledARRatio);
                videoView.setLayoutParams(layoutParams);
            }
        });

Этот код не заботится о ширине экрана.

Ширина всегда масштабируется до высоты экрана.На самом деле, он всегда будет масштабироваться до своей (VideoView) собственной высоты.Но, как я прокомментировал код, используйте layout_height = "match_parent", чтобы соответствовать экрану.

Я не уверен, хотите ли вы, чтобы ширина подходила, если ширина экрана больше.

Ширина видео не будет заполнять экран, если ширина экрана больше.

...