Как избежать приостановки живых обоев Android, когда активность настроек открыта при использовании GLSurfaceView

Я пишу 3D-живые обои для Android, используя известную оболочку GLSurfaceView (http://www.rbgrn.net/content/354-glsurfaceview-adapted-3d-live-wallpapers).

Когда я открываю экран настроек, чтобы изменить настройки обоев, настройки отображаются прозрачными поверх предварительного просмотра обоев. Это хорошо, потому что позволяет предварительно просмотреть изменения настроек, которые я вношу. Это прекрасно работает, за исключением одной проблемы: живые обои приостановлены, пока настройки находятся поверх них!

Как я могу избежать приостановки моих обоев?


person Lennart Rolland    schedule 17.12.2010    source источник
comment
Вы нашли решение для этого?   -  person Christopher Orr    schedule 08.04.2011
comment
Я понял, что это не связано с OpenGL ES, так как эта проблема присутствует для любых живых обоев.   -  person Lennart Rolland    schedule 23.03.2012


Ответы (2)


Я придумал обходной путь, который может быть полезен, в зависимости от того, как работают ваши обои...

В моей активности настроек всякий раз, когда пользователь вносит изменения (например, перемещает ползунок, устанавливает флажок), я передаю Intent с соответствующей информацией о настройках.

В методе onCreate живых обоев я динамически регистрирую BroadcastReceiver для получения этих событий настроек. Я отменяю регистрацию этого приемника в onDestroy.

При получении трансляции настроек заставляю обои рисовать один кадр с новыми настройками. Поскольку действие настроек прозрачно, это сразу дает пользователю представление о том, как будут выглядеть обои с выбранными настройками.

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

person Christopher Orr    schedule 10.04.2011
comment
Это решение звучит великолепно, я обязательно протестирую его, однако мне бы очень хотелось, чтобы анимация воспроизводилась непрерывно. На самом деле, я не понимаю, почему это не должно быть по умолчанию. - person Lennart Rolland; 23.03.2012

Меня это тоже немного раздражало. Я полностью предотвратил проблему, просто вызывая finish() в своей активности настроек всякий раз, когда вносятся изменения. Это позволяет мгновенно и полностью просмотреть обои для пользователя. Чтобы вернуться в настройки и внести еще одно изменение, достаточно одного клика, и это обеспечивает довольно приятный пользовательский интерфейс.

 public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
            String key) {
       finish();
 }

Я использовал это в своей линейке обоев. Вот пример:

person Blackfireshocker    schedule 20.08.2012