Cambiar el estilo de android MediaController

Hay una manera de personalizar el MediaController? Necesito cambiar el estilo de los botones, SeekBar etc.

InformationsquelleAutor duessi | 2010-01-11

3 Kommentare

  1. 3

    El método makeControllerView estaba destinado a ser reemplazado por lo que podría proporcionar a su propio punto de vista. Por desgracia, está oculto en el momento.

    Es posible que desee tomar la fuente de MediaController y cualquiera de reimplementar o copiar-y-pegar los métodos ocultos en una subclase de modo que usted puede personalizar.

    • makeControllerView es protected para la fuente que estoy mirando. ¿Alguien sabe cuando cambió de private a protected?
    • Oh, tal vez usted está hablando acerca de la @ocultar en el javadoc de la makeControllerView en android.widget.MediaController. Mientras que este javadoc poco aparece para detener el @Override anotación de trabajo, no no en realidad prevenir reemplazar el método. Pregunta Original se sitúa prácticamente sin cambios – esto era privado?
  2. 7

    Lo que puedes hacer es recurse el punto de vista de la jerarquía de su MediaController y establecer el SeekBar del dibujable programación:

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

    A continuación, sólo tiene que llamar

    styleMediaController(myMC);
    • El código no me funciona. ¿Cuál es la razón por la paremeter index? v.getChildCount() devuelve 0 cada vez.
    • El índice de parámetro es necesario debido a que la función se llama recursivamente por sí mismo, descendiendo el punto de vista de la jerarquía de la MediaController vista.
    • Pero la variable index no se utiliza nunca.
    • Es, ver la línea 5 y 11 del código de arriba 😉
    • Sí se establece en dos ocasiones, pero nunca de leerlo^^
    • Que tiene algún punto de la misma 😉 Editado el post para quitar lo superfluo argumento, gracias!
    • Tenía que llamar a styleMediaController(myMC) en el OnPreparedListener de la VideoView para hacer que funcione. De lo contrario, la MediaController vista no tiene hijos.
    • Que realmente es una pésima solución en términos de casi todo (legibilidad, estabilidad, etc.). Sin embargo, parece que el marco que nos ha dejado otra opción. Gracias por compartir

  3. 3

    He cambiado el código de bk138 la respuesta de con sólo cambiar el color de los elementos. No la dibujables sí mismos. Esta solución es compatible con dispositivos antiguos en combinación con el apoyo de la biblioteca 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);
                }
            }
        }

    A continuación, sólo tiene que llamar

    styleMediaController(myMC);

    Tuvo que llamar a styleMediaController(myMC) en el OnPreparedListener de la VideoView para hacer que funcione. De lo contrario, la MediaController vista no tiene hijos.

    • ¿qué es setCompatTint?

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea