La méthode makeControllerView était destinée à être substituée de sorte que vous pourriez fournir à votre propre point de vue. Malheureusement, il est caché à l'heure actuelle.
Vous voudrez peut-être prendre la source de MediaController et soit de les reproduire ou de le copier-coller le caché méthodes dans une sous-classe de sorte que vous pouvez personnaliser.
makeControllerView est protected pour la source, je suis à la recherche d'. Quelqu'un sait quand il a changé de private à protected? Oh, vous êtes peut-être parler de la @cacher dans la javadoc de la makeControllerView dans android.widget.MediaController. Tout ce javadoc bits semble arrêter le @Override l'annotation de travail, il n' pas en fait, empêcher la substitution de la méthode. Question d'origine des peuplements presque inchangée - a ce privé?
Ce que vous pouvez faire est de répéter la vue de la hiérarchie de votre MediaController et définir la SeekBar est dessiné par programme:
privatevoid styleMediaController(View view){if(view instanceofMediaController){MediaController v =(MediaController) view;for(int i =0; i < v.getChildCount(); i++){
styleMediaController(v.getChildAt(i));}}elseif(view instanceofLinearLayout){LinearLayout ll =(LinearLayout) view;for(int i =0; i < ll.getChildCount(); i++){
styleMediaController(ll.getChildAt(i));}}elseif(view instanceofSeekBar){((SeekBar) view).setProgressDrawable(getResources().getDrawable(R.drawable.progressbar));((SeekBar) view).setThumb(getResources().getDrawable(R.drawable.progresshandle));}}
Ensuite, il suffit d'appeler
styleMediaController(myMC);
Votre code ne fonctionne pas pour moi. Quelle est la raison de la paremeter index? v.getChildCount() retourne 0 à chaque fois. Le paramètre index est nécessaire parce que la fonction est appelée récursivement par lui-même, en descendant la hiérarchie vue de la MediaController vue. Mais la variable index n'est jamais utilisé. Qui a un certain point 😉 Édité le post pour supprimer le superflu argument, merci! Dû appeler styleMediaController(myMC) dans le OnPreparedListener de la VideoView pour le faire fonctionner. Sinon, le MediaController vue n'a pas d'enfants.
J'ai changé le code de bk138 la réponse de juste changer la couleur des éléments. Pas le un drawable eux-mêmes. Cette solution est compatible avec les anciens appareils en conjonction avec le soutien de la bibliothèque v4.
privatevoid styleMediaController(View view){if(view instanceofMediaController){MediaController v =(MediaController) view;for(int i =0; i < v.getChildCount(); i++){
styleMediaController(v.getChildAt(i));}}elseif(view instanceofLinearLayout){LinearLayout ll =(LinearLayout) view;for(int i =0; i < ll.getChildCount(); i++){
styleMediaController(ll.getChildAt(i));}}elseif(view instanceofSeekBar){((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, il suffit d'appeler
styleMediaController(myMC);
Dû appeler styleMediaController(myMC) dans le OnPreparedListener de la VideoView pour le faire fonctionner. Sinon, le MediaController vue n'a pas d'enfants.
La méthode
makeControllerView
était destinée à être substituée de sorte que vous pourriez fournir à votre propre point de vue. Malheureusement, il est caché à l'heure actuelle.Vous voudrez peut-être prendre la source de MediaController et soit de les reproduire ou de le copier-coller le caché méthodes dans une sous-classe de sorte que vous pouvez personnaliser.
makeControllerView
estprotected
pour la source, je suis à la recherche d'. Quelqu'un sait quand il a changé deprivate
àprotected
?Oh, vous êtes peut-être parler de la @cacher dans la javadoc de la
makeControllerView
dansandroid.widget.MediaController
. Tout ce javadoc bits semble arrêter le@Override
l'annotation de travail, il n' pas en fait, empêcher la substitution de la méthode. Question d'origine des peuplements presque inchangée - a ce privé?OriginalL'auteur James
Ce que vous pouvez faire est de répéter la vue de la hiérarchie de votre MediaController et définir la SeekBar est dessiné par programme:
Ensuite, il suffit d'appeler
index
?v.getChildCount()
retourne 0 à chaque fois.Le paramètre index est nécessaire parce que la fonction est appelée récursivement par lui-même, en descendant la hiérarchie vue de la MediaController vue.
Mais la variable
index
n'est jamais utilisé.Qui a un certain point 😉 Édité le post pour supprimer le superflu argument, merci!
Dû appeler
styleMediaController(myMC)
dans leOnPreparedListener
de laVideoView
pour le faire fonctionner. Sinon, le MediaController vue n'a pas d'enfants.OriginalL'auteur bk138
J'ai changé le code de bk138 la réponse de juste changer la couleur des éléments. Pas le un drawable eux-mêmes. Cette solution est compatible avec les anciens appareils en conjonction avec le soutien de la bibliothèque v4.
Ensuite, il suffit d'appeler
Dû appeler
styleMediaController(myMC)
dans leOnPreparedListener
de laVideoView
pour le faire fonctionner. Sinon, le MediaController vue n'a pas d'enfants.setCompatTint
?OriginalL'auteur OneWorld