2015-11-09 7 views
7

Ich habe eine Aktivität, die den ExoPlayer zum Abspielen eines Videos verwendet. Wenn ich im Vollbildmodus gehe, wenn das Seitenverhältnis des Geräts nicht mit dem des Videos übereinstimmt, werden am oberen und unteren Rand des Videos kleine schwarze Balken angezeigt.Wie kann man in Android mit dem exoplayer die Oberflächenansicht mit einem Video füllen, das nicht dasselbe Seitenverhältnis wie das Gerät hat?

Dies ist, wie das Layout aussieht:

<com.google.android.exoplayer.AspectRatioFrameLayout 
    android:id="@+id/video_frame" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentBottom="true"> 

    <SurfaceView android:id="@+id/surface_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_gravity="fill_vertical"/> 

    <View android:id="@+id/shutter" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@android:color/black"/> 

</com.google.android.exoplayer.AspectRatioFrameLayout> 

Ich hatte gehofft, dass

aspectRatioFrameLayout.setAspectRatio(mVideo.getAspectRatio()); 

das Problem lösen würde, aber ich hatte keinen Erfolg. Gibt es eine Möglichkeit, den Bildschirm mit dem Video zu füllen, auch wenn ein Teil des Videos vom Bildschirm abgeschnitten ist?

Antwort

6

Sie können entfernen die com.google.android.exoplayer.AspectRatioFrameLayout.

Als nächstes setzen Sie eine einfache FrameLayout mit Breite und Höhe auf .

Beachten Sie, dass die SurfaceView in Breite und Höhe bleiben sollte = .

Erklärung: AspectRatioFrameLayout stellt die korrekte Höhe der Ansicht entsprechend dem realen Videoverhältnis ein (Berechnung basierend auf Breite, Höhe und PixelRatio). Wenn Sie dies nicht wünschen, kann Exoplayer die Ansicht auf einer SurfaceView noch so anzeigen, wie sie es vorher getan haben. Wenn das SurfaceView nicht @Override ist, wird es kein Seitenverhältnis haben.

+0

Vielen Dank! Sorry für die späte Antwort ... es hat funktioniert! So einfach, nur zum Frame-Layout zu wechseln, war der Trick – kimv

6

Es gibt eine schnellste Möglichkeit, den Bildschirm mit dem Video zu füllen. Gehen Sie zu der SimpleExoPlayerView.java Klasse, ändern Sie die resizeMode von AspectRatioFrameLayout.RESIZE_MODE_FIT zu AspectRatioFrameLayout.RESIZE_MODE_FILL. RESIZE_MODE_FILL ignoriert das angegebene Seitenverhältnis. Verwenden Sie diesen Weg, wenn Sie den ExoPlayer als Modul in Ihrem Projekt verwenden.

AKTUALISIERT Wenn Sie ExoPlayer als Bibliothek verwenden, haben sie eine Methode zur setResizeMode(). Sie haben nur AspectRatioFrameLayout.RESIZE_MODE_FILL in Ihrer Sicht eingestellt: simpleExoPlayerView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_FILL) Das ist alles!

+0

simpleExoPlayerView.setResizeMode (AspectRatioFrameLayout.RESIZE_MODE_FILL); Es ist hilfreich, um die Elternansicht mit Player zu füllen. – SANAT

+0

Was ist, wenn ich das Seitenverhältnis einstellen möchte? –

+0

Wenn Sie das Seitenverhältnis des Videos beibehalten und auf die volle Ansicht vergrößern möchten, verwenden Sie fixed_width, wenn Ihr Video größer als breit (Hochformat) oder fixed_height ist, wenn es breiter ist als es ist groß (Landschaft) – Gmeister4