How to make video full screen and keep aspect ratio?

Refresh

2 weeks ago

Views

5k time

1

I have a video in one size and would like from it to display full size all the time no matter the size of the screen. At the same time I would like to keep aspect ratio of that video so it doesn't stretch i create a bad look.

I can accomplish that stretch effect like this but the video looks bad then:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <VideoView android:id="@+id/videoViewRelative"
         android:layout_alignParentTop="true"
         android:layout_alignParentBottom="true"
         android:layout_alignParentLeft="true"
         android:layout_alignParentRight="true"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent">
    </VideoView>

</RelativeLayout>

In my this case it is not important to show whole video to user so I need something like how it's done for ImageView:

android:scaleType="centerCrop"

Is there any crop alternative for VideoView? Thank you :)

4 answers

1

Вы можете попробовать использовать эту библиотеку

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

2

Я знаю его старый question.But только в том случае, что это помогает кому-то. В моем случае я использовал CustomTextureVideoView, который проходит TextureView

И я делал вид на весь экран в

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();
    ((Activity)getContext()).getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
    int screenHeight = metrics.heightPixels;
    int screenWidth = (screenHeight*9)/16;
    setMeasuredDimension(screenWidth, screenHeight);
}

Я получаю высоту дисплея с DisplayMetrics и корректировки с шириной зрения, так что видео Vill сохранить пропорции. я хотел сохранить пропорции моего видео, чтобы быть 16: 9

и в макете сделать вид

android:layout_centerHorizontal="true"

так что стороны будут отрезаны одинаково с обеих сторон.

Я хотел , чтобы мое видео приспособиться к новому соотношению сторон фантазии 18.5: 9 Самсунг s8 Вот почему соотношение сторон составляет 16: 9, в случае , если интересно ..;)

1

Как это вы можете установить свойство видео самостоятельно. Используйте SurfaceView (дает больше контроля над видом), установите его в fill_parent, чтобы соответствовать всему экрану.

Попробуйте этот код

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     
              android:orientation="vertical" 
              android:layout_width="match_parent"
              android:layout_height="fill_parent">

    <SurfaceView
        android:id="@+id/surfaceViewFrame"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_gravity="center" >
    </SurfaceView>

</Linearlayout>

затем на код Java получить вид поверхности и добавить медиа-плеер к нему

surfaceViewFrame = (SurfaceView) findViewById(R.id.surfaceViewFrame);
player = new MediaPlayer();
player.setDisplay(holder);

для деталей используйте эту ссылку

0

Это проще решать с последним ConstraintLayout. Преобразование макета в ConstraintLayout. Затем добавьте строку для VideoView.

    app:layout_constraintDimensionRatio="16:9"