Center Crop an Android VideoView Center Crop an Android VideoView android android

Center Crop an Android VideoView


You can only achieve this with a TextureView. (surfaceView won't work either). Here's a lib for playing video in a textureView with center crop function. TextureView can only be used in api level 14 and up unfortunately.

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

Another possibility is to zoom in the videoview just right, but I haven't tried that yet.


The simple and easy way if you are using ConstraintLayout.

XML

<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent">    <VideoView        android:id="@+id/videoView"        android:layout_width="@dimen/dimen_0dp"        android:layout_height="@dimen/dimen_0dp"        android:visibility="gone"        app:layout_constraintBottom_toBottomOf="parent"        app:layout_constraintEnd_toEndOf="parent"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toTopOf="parent" /></androidx.constraintlayout.widget.ConstraintLayout>

then

In Kotlin:

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

See my Java version answer here:https://stackoverflow.com/a/59069357/6255841

And this worked for me.


Nabin's answer worked for me.

Here is the Java version:

videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {    @Override    public void onPrepared(MediaPlayer mp) {        float videoRatio = mp.getVideoWidth() / (float) mp.getVideoHeight();        float screenRatio = videoView.getWidth() / (float) videoView.getHeight();        float scaleX = videoRatio / screenRatio;        if (scaleX >= 1f) {            videoView.setScaleX(scaleX);        } else {            videoView.setScaleY(1f / scaleX);        }    }});