6
votes

Comment créer un Exoplayer PlayerView arrondi sous Android

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>


1 commentaires

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?


3 Réponses :


0
votes

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 >


2 commentaires

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.



11
votes

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


0 commentaires

3
votes

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>


0 commentaires