Изменить стиль Android MediaController - PullRequest
9 голосов
/ 11 января 2010

Есть ли способ настроить MediaController? Мне нужно изменить стиль кнопок, SeekBar и т. Д.

Ответы [ 3 ]

6 голосов
/ 04 октября 2012

Что вы можете сделать, это восстановить иерархию представления вашего MediaController и программно настроить рисование SeekBar:

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

Затем просто позвоните

styleMediaController(myMC);
3 голосов
/ 23 марта 2016

Я изменил код ответа bk138 , чтобы просто изменить цвет элементов. Не сами по себе. Это решение совместимо со старыми устройствами в сочетании с библиотекой поддержки 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);
            }
        }
    }

Тогда просто позвоните

styleMediaController(myMC);

Нужно было позвонить styleMediaController(myMC) в OnPreparedListener из VideoView, чтобы заставить его работать. В противном случае представление MediaController не имеет дочерних элементов.

3 голосов
/ 11 января 2010

Метод makeControllerView должен был быть переопределен, чтобы вы могли предоставить свой собственный вид. К сожалению, на данный момент он скрыт.

Возможно, вы захотите взять источник MediaController и либо переопределить его, либо скопировать и вставить скрытые методы в подкласс, чтобы вы могли настроить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...