Центр Обрезать Android VideoView

Я ищу что-то вроде CENTER_CROP в ImageView.ScaleType

Равномерно масштабируйте изображение (поддерживайте пропорции изображения), чтобы обе размеры (ширина и высота) изображения были равны или больше соответствующего размера представления (минус заполнение). Изображение затем центрируется в представлении. Из XML используйте этот синтаксис: android: scaleType = "centerCrop"

но для VideoView. Есть ли что-нибудь подобное?

Ответы

Ответ 1

Вы можете добиться этого только с помощью TextureView. (surfaceView тоже не работает). Здесь lib для воспроизведения видео в текстуре с функцией центровки. TextureView можно использовать только в api level 14 и, к сожалению, к сожалению.

https://github.com/dmytrodanylyk/android-video-crop

Еще одна возможность - просто увеличить видеоизображение, но я еще не пробовал.

Ответ 2

//store the SurfaceTexture to set surface for MediaPlayer
mTextureView.setSurfaceTextureListener(new SurfaceTextureListener() {
@Override
    public void onSurfaceTextureAvailable(SurfaceTexture surface,
            int width, int height) {
        FullScreenActivity.this.mSurface = surface;

    }

Ответ 3

Существует способ без использования TextureView.

Поместите свой VideoView внутри ConstraintLayout (эквивалент с FrameLayout не работает):

<androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/container"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <VideoView
            android:id="@+id/videoView"
            android:layout_width="0dp"
            android:layout_height="0dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

Затем во время выполнения добавьте OnPreparedListener который проверяет соотношение видео и отношение View и масштабирует ConstraintLayout соответственно:

videoView.setOnPreparedListener { mediaPlayer ->
        val videoRatio = mediaPlayer.videoWidth / mediaPlayer.videoHeight.toFloat()
        val screenRatio = container.width / container.height.toFloat()
        val scaleX = videoRatio / screenRatio
        if (scaleX >= 1f) {
            container.scaleX = scaleX
        } else {
            container.scaleY = 1f / scaleX
        }
    }

Ответ 4

Это решение для VideoView масштабирует Center Crop или Center Inside, сохраняя пропорции видео, как это делает ImageView. Надеюсь, это поможет кому-то! fooobar.com/info/129179/...