Center Crop An Android Videoview
I am looking for something like the CENTER_CROP in ImageView.ScaleType Scale the image uniformly (maintain the image's aspect ratio) so that both dimensions (width and height) of
Solution 1:
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.
Solution 2:
The simple and easy way if you are using ConstraintLayout.
XML
<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayoutxmlns: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"><VideoViewandroid: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 ->
valvideoRatio= mediaPlayer.videoWidth / mediaPlayer.videoHeight.toFloat()
valscreenRatio= videoView.width / videoView.height.toFloat()
valscaleX= 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.
Solution 3:
Nabin's answer worked for me.
Here is the Java version:
videoView.setOnPreparedListener(newMediaPlayer.OnPreparedListener() {
@OverridepublicvoidonPrepared(MediaPlayer mp) {
floatvideoRatio= mp.getVideoWidth() / (float) mp.getVideoHeight();
floatscreenRatio= videoView.getWidth() / (float) videoView.getHeight();
floatscaleX= videoRatio / screenRatio;
if (scaleX >= 1f) {
videoView.setScaleX(scaleX);
} else {
videoView.setScaleY(1f / scaleX);
}
}
});
Solution 4:
//store the SurfaceTexture to set surface for MediaPlayer
mTextureView.setSurfaceTextureListener(newSurfaceTextureListener() {
@OverridepublicvoidonSurfaceTextureAvailable(SurfaceTexture surface,
int width, int height) {
FullScreenActivity.this.mSurface = surface;
}
Post a Comment for "Center Crop An Android Videoview"