Bonjour, j'essaie de créer un lecteur vidéo arrondi et j'utilise la bibliothèque Exoplaye2. Je mets le PLayerView dans un FrameLayout arrondi, mais je ne sais pas comment rendre le PlayerView lui-même arrondi. J'ai essayé ceci mais cela ne fonctionne pas, j'ai même créé un arrondi_shape_drawable et l'a ajouté à l'arrière-plan du Playeview, mais cela ne fonctionne pas (en gros, la définition de l'arrière-plan d'un PlayeView ne fonctionne pas du tout).
Voici mon fichier de mise en page simple:
<LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_gravity="center_horizontal" android:layout_marginBottom="25dp" android:layout_weight="4" android:gravity="center" android:orientation="horizontal" android:weightSum="1"> <FrameLayout android:id="@+id/player_view_layout" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="0.6" android:padding="10dp" android:background="@drawable/rounded_video_layout"> <com.google.android.exoplayer2.ui.PlayerView android:id="@+id/exoplayer_player_view" android:layout_width="match_parent" android:layout_height="match_parent" app:fastforward_increment="@integer/exoplayer_playback_fastforward_increment_ms" app:resize_mode="fill" app:rewind_increment="@integer/exoplayer_playback_rewind_increment_ms" app:show_timeout="@integer/exoplayer_show_control_timeout_ms" app:use_artwork="true" app:use_controller="false"> </com.google.android.exoplayer2.ui.PlayerView> </FrameLayout> </LinearLayout>
3 Réponses :
Sur votre FrameLayout
, supprimez le remplissage puis appelez clipToOutline ()
sur cette vue, par exemple
player_view_layout.clipToOutline()
Par défaut, l'arrière-plan de la vue est utilisé comme fournisseur de contour pour une vue, donc si le dessin d'arrière-plan a des coins arrondis, tout le contenu de FrameLayout
sera découpé pour correspondre.
https://developer.android.com/training/material/shadows-clipping
p >
J'ai essayé cela avant et cela ne fonctionne pas. Le problème est que le PlayerView ne change pas par rapport à son parent
@Dav J'ai ce code dans un projet et cela fonctionne très bien.
Après une longue recherche, je n'ai pas réussi à faire des coins arrondis PlayerView ou ImageView en xml uniquement (je ne pense pas que ce soit possible). J'ai donc décidé de le faire en java. Voici le code:
playerView.setOutlineProvider(new ViewOutlineProvider() { @Override public void getOutline(View view, Outline outline) { outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), 15); } }); playerView.setClipToOutline(true);
Vous pouvez peut-être utiliser CardView comme ceci et PlayerView surface_type
doit être texture_view
.
<android.support.v7.widget.CardView android:layout_width="match_parent" android:layout_height="wrap_content" app:cardCornerRadius="8dp" app:cardElevation="0dp"> <com.google.android.exoplayer2.ui.PlayerView android:layout_width="match_parent" android:layout_height="wrap_content" app:surface_type="texture_view" app:use_controller="false" /> </android.support.v7.widget.CardView>
Vous pourriez créer une ressource dessinable avec des coins arrondis noircis et un milieu entièrement transparent, puis la superposer à l'intérieur d'un
ImageView
au-dessus de votre lecteur vidéo?