Как избежать паузы Android Live обои, в то время как настройка активность открыта при использовании GlsurfaceView
-
11-10-2019 - |
Вопрос
Я пишу 3D живые обои для Android, используя знаменитую обертку GlsurfaceView (http://www.rbgrn.net/content/354-glsurfaceview-adapted-3d-livewallpapers)
Когда я открываю экран предпочтения, чтобы изменить настройки обоев, настройки отображаются как прозрачные на моем предварительном просмотре обоев. Это хорошо, потому что это позволяет мне предварительно просмотреть изменения настройки, которые я вносил. Это прекрасно работает, за исключением одной проблемы: живые обои приостановлены, пока настройки находятся на вершине!
Как я могу избежать пауза обои?
Решение
Я придумал обходной путь, который может быть полезен, в зависимости от того, как функционируют ваши обои ...
В моей деятельности настроек, когда пользователь вносит изменение (например, перемещает слайдер, проверяет флажок), я транслирую Intent
с соответствующей информацией настройки.
В живых обоях onCreate
Метод, я динамически зарегистрирую BroadcastReceiver
Чтобы получить эти настройки событий. Я перерегирую этот приемник в onDestroy
.
При получении трансляции настроек я заставляю обои рисовать одну раму с новыми настройками. Поскольку активность настроек является прозрачной, это сразу дает пользователю представление о том, как будут выглядеть обои с выбранными настройками.
Точно так же, используя этот подход, вы можете запланировать обои, чтобы оживить на несколько секунд после изменения настроек - или что -то, что подходит для вашей реализации.
Другие советы
Я также нашел, что это тоже немного раздражает. Я вообще предотвратил проблему, просто позвонив finish()
В моих настройках деятельность всякий раз, когда вносятся изменения. Это допускает мгновенный, полный предварительный просмотр обоев для пользователя. Требуется только щелчок, чтобы вернуться в настройки, чтобы внести еще один изменение, и это делает довольно хороший пользовательский опыт.
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
finish();
}
Я использовал это в своей линии обоев. Здесь является примером: