2015-11-09 38 views
7

Mam aktywność, która używa ExoPlayera do odtwarzania wideo. Gdy przejdę w tryb pełnoekranowy, o ile współczynnik proporcji urządzenia nie będzie równy współczynnikowi wideo, otrzymam małe czarne paski u góry i u dołu wideo.W Androidzie, używając egzoplayera, jak wypełnić widok powierzchni z filmu, który nie ma tego samego współczynnika kształtu z urządzeniem?

ten sposób układ wygląda:

<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> 

miałem nadzieję, że

aspectRatioFrameLayout.setAspectRatio(mVideo.getAspectRatio()); 

by rozwiązać ten problem, ale nie miałem powodzenia. Czy istnieje sposób na wypełnienie ekranu wideo, nawet jeśli część filmu jest odcięta od ekranu?

Odpowiedz

6

Możesz usunąć z com.google.android.exoplayer.AspectRatioFrameLayout.

Następnie, połóż prosty FrameLayout o szerokości i wysokości na match_parent.

Należy pamiętać, że SurfaceView powinien pozostać na szerokości i wysokości = match_parent.

Objaśnienie: AspectRatioFrameLayout ustawia prawidłową wysokość widoku zgodnie z rzeczywistym współczynnikiem wideo (kalkula- cję opartą na szerokości, wysokości i pikselach). Jeśli tego nie zrobisz, Exoplayer może nadal wyświetlać widok na SurfaceView, tak jak robili to wcześniej. Jeśli SurfaceView nie jest @Override, nie będzie miał współczynnika kształtu.

+0

Dziękujemy! Przepraszam za spóźnioną odpowiedź ... zadziałało! Tak proste, po prostu przejście do układu klatek zrobiło podstęp – kimv

6

Istnieje najszybszy sposób wypełnienia ekranu filmem. Przejdź do klasy SimpleExoPlayerView.java, zmień resizeMode z AspectRatioFrameLayout.RESIZE_MODE_FIT na AspectRatioFrameLayout.RESIZE_MODE_FILL. RESIZE_MODE_FILL zignoruje określony współczynnik proporcji. Skorzystaj z tej opcji, jeśli używasz ExoPlayer jako modułu w swoim projekcie.

AKTUALIZACJA Jeśli używasz ExoPlayer jako biblioteka, mają metodę setResizeMode(). Po prostu ustawiłeś na AspectRatioFrameLayout.RESIZE_MODE_FILL w swoim widoku: simpleExoPlayerView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_FILL) To wszystko!

+0

simpleExoPlayerView.setResizeMode (AspectRatioFrameLayout.RESIZE_MODE_FILL); pomocne przy wypełnianiu widoku rodzica przy pomocy odtwarzacza. – SANAT

+0

co zrobić, jeśli chcę ustawić współczynnik proporcji –

+0

Jeśli chcesz zachować współczynnik proporcji wideo, ale rozwinąć go do pełnego rozmiaru widoku, użyj fixed_width, jeśli wideo jest wyższe niż szerokie (portret) lub fixed_height, jeśli jest szersze niż jest wysoki (krajobraz) – Gmeister4