Question

Existe-t-il un moyen de personnaliser le MediaController? J'ai besoin de changer le style des boutons, de la barre de recherche, etc.

Était-ce utile?

La solution

La méthode makeControllerView était censé être remplacé afin que vous puissiez fournir votre propre point de vue. Malheureusement, il est caché pour le moment.

Vous voudrez peut-être prendre la source de MediaController et le réimplémenter ou la copier-et-casson les méthodes cachées dans une sous-classe afin que vous puissiez la personnaliser.

Autres conseils

Ce que vous pouvez faire, c'est reproduire la hiérarchie de la vue de votre média et définir le dessin de Seekbar programmatiquement:

private void styleMediaController(View view) {
    if (view instanceof MediaController) {
        MediaController v = (MediaController) view;
        for(int i = 0; i < v.getChildCount(); i++) {
            styleMediaController(v.getChildAt(i));
        }
    } else
        if (view instanceof LinearLayout) {
            LinearLayout ll = (LinearLayout) view;
            for(int i = 0; i < ll.getChildCount(); i++) {
                styleMediaController(ll.getChildAt(i));
            }
        } else if (view instanceof SeekBar) {
            ((SeekBar) view).setProgressDrawable(getResources().getDrawable(R.drawable.progressbar)); 
            ((SeekBar) view).setThumb(getResources().getDrawable(R.drawable.progresshandle));
        }
}

Ensuite, appelez juste

styleMediaController(myMC);

J'ai changé le code de la réponse de BK138 Pour changer la couleur des éléments. Pas les dessinables eux-mêmes. Cette solution est compatible avec les anciens appareils en conjonction avec la bibliothèque de support v4.

private void styleMediaController(View view) {
        if (view instanceof MediaController) {
            MediaController v = (MediaController) view;
            for (int i = 0; i < v.getChildCount(); i++) {
                styleMediaController(v.getChildAt(i));
            }
        } else if (view instanceof LinearLayout) {
            LinearLayout ll = (LinearLayout) view;
            for (int i = 0; i < ll.getChildCount(); i++) {
                styleMediaController(ll.getChildAt(i));
            }
        } else if (view instanceof SeekBar) {
            ((SeekBar) view)
                    .getProgressDrawable()
                    .mutate()
                    .setColorFilter(
                            getResources().getColor(
                                    R.color.MediaPlayerMeterColor),
                            PorterDuff.Mode.SRC_IN);
            Drawable thumb = ((SeekBar) view).getThumb().mutate();
            if (thumb instanceof android.support.v4.graphics.drawable.DrawableWrapper) {
                //compat mode, requires support library v4
                ((android.support.v4.graphics.drawable.DrawableWrapper) thumb).setCompatTint(getResources()
                        .getColor(R.color.MediaPlayerThumbColor));
            } else {
                //lollipop devices
                thumb.setColorFilter(
                        getResources().getColor(R.color.MediaPlayerThumbColor),
                        PorterDuff.Mode.SRC_IN);
            }
        }
    }

Ensuite, appelez juste

styleMediaController(myMC);

A dû appeler styleMediaController(myMC) dans le OnPreparedListener de la VideoView pour le faire fonctionner. Sinon, la vue MediaController n'a pas d'enfants.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top