Лучший способ связать видимость ImageView с состоянием MediaPlayer?

Я работаю над проектом, в котором элемент ImageView должен быть виден только во время воспроизведения объекта MediaPlayer.

Состояние MediaPlayer может измениться в любое время.

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

Вот текущий код для потока, и приложение запускается, но изображение не отображается.

Thread imageRender = new Thread() {
    @Override
    public void run() {
        if (mp.isPlaying() && img.getVisibility() == View.INVISIBLE) {
            img.setVisibility(View.VISIBLE);
        } else if (!mp.isPlaying() && img.getVisibility() == View.VISIBLE) {
            img.setVisibility(View.INVISIBLE);
        }
    }
};

1 ответ

Решение

Вам необходимо обработать обновление пользовательского интерфейса в потоке пользовательского интерфейса. Простой способ решить вашу проблему

    Thread imageRender = new Thread() {
        @Override
        public void run() {
            if (mp.isPlaying() && img.getVisibility() == View.INVISIBLE) {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        img.setVisibility(View.VISIBLE);
                    }
                });
            } else if (!mp.isPlaying() && img.getVisibility() == View.VISIBLE) {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        img.setVisibility(View.INVISIBLE);
                    }
                });

            }
        }
    };
Другие вопросы по тегам