10

MediaControllerをカスタマイズする方法はありますか?ボタンやSeekBarなどのスタイルを変更する必要があります。

4

3 に答える 3

8

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);
于 2012-10-03T23:28:22.957 に答える
3

このメソッドmakeControllerViewは、独自のビューを提供できるようにオーバーライドすることを目的としていました。残念ながら、現時点では非表示になっています。

MediaControllerのソースを取得して再実装するか、非表示のメソッドをコピーしてサブクラスに貼り付けて、カスタマイズできるようにすることができます。

于 2010-01-11T20:00:48.723 に答える
3

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ビューには子がありません。

于 2016-03-23T08:37:30.290 に答える