Пользовательский метод setVisibilty виджета не работает? - PullRequest
0 голосов
/ 24 сентября 2018

Я создал собственный виджет, который воспроизводит аудио с URL.Я использую MediaPlayer API.

Способ реализации виджета:

    public class CustomAudioPayer extends RelativeLayout {

        ....
        public CustomAudioPayer(final Context context, @Nullable AttributeSet attrs) {
                super(context, attrs);
                LayoutInflater inflater = LayoutInflater.from(context);
                View mainView = inflater.inflate(R.layout.custom_palyer, this, true);

        // Code to initialize player & set url
        .......
        // On button click, we start playing

        play_button.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        showProgressBar(true);
         mediaPlayer = new MediaPlayer();
                if (headers != null) {
                    Uri uri = Uri.parse(url);
                    mediaPlayer.setDataSource(getContext(), uri, headers);
.....

        mediaPlayer.prepare();

.....
        }
        }
        }
    ...........
    }

Но когда медиаплеер буферизует поток с сервера, я вижу одну индикаторную строку,Индикатор выполнения видимый и невидимый в зависимости от состояния игрока и прослушивателя буфера.

mediaPlayer.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {
            @Override
            public void onBufferingUpdate(MediaPlayer mediaPlayer, int what) {
                Log.e(TAG, "onBufferingUpdate");
                switch (what) {
                    case MediaPlayer.MEDIA_INFO_BUFFERING_START:
                        showProgressBar(true);
                        break;
                    case MediaPlayer.MEDIA_INFO_BUFFERING_END:
                        showProgressBar(false);
                        break;
                }
            }
        });

Но первоначальный индикатор выполнения не отображается как можно скорее в виджете.т.е. когда проигрыватель мультимедиа запрашивает контент с сервера в это время, ни один из методов setVisibility не работает с индикатором выполнения.

Метод showProgressBar (логический):

private void showProgressBar(boolean show) {
        if (show) {
            buffering_pb.setVisibility(VISIBLE);
            Log.e(TAG, "buffering_pb: Visible");
        } else {
            buffering_pb.setVisibility(INVISIBLE);
            Log.e(TAG, "buffering_pb: Invisible");
        }
    }

Добавлены журналыв приведенном выше методе печатается на logcat как можно скорее, они становятся видимыми или невидимыми, но пользовательский интерфейс не показывает соответствующее изменение видимости, что может пойти не так?

Обновление:

Пользователь pskink в комментариях предлагается документация MediaPlayer.prepareAsync () вместо MediaPlayer.prepare();, я изменил метод с prepare() на prepareAsyc(), тогда мои взгляды отражают видимое и невидимоенемедленно заявить.

...