2013-08-23 3 views
2

Я разработал Android LWP, используя RenderScript. Теперь я хочу добавить Setting page, и я использую Preferences для сохранения значений параметров.Android LWP, Как обновить объекты RenderScript после изменения настроек настроек?

EG. Исходное количество объектов - 10. Затем пользователь может изменить количество объектов на 20.

Я не могу обновить/обновить/перезагрузить/вызвать RenderScript для регенерации с помощью новой настройки. Как это сделать?

Мне удалось до onSharedPreferenceChanged, но как вызвать его, чтобы восстановить LWP с помощью новой настройки сразу после нажатия пользователем?

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
//How to force the renderscript to update here 
}  

Фактически, мне нужно знать, что «как обновить/очистить любой нарисованный объект на renderscript?» Потому что, когда установка была изменена, мне нужно снова перерисовать объекты ....

Лучшие вещи мне удалось зайти так далеко, чтобы установить количество объектов на слушателя, как это

частный класс SPListener реализует SharedPreferences.OnSharedPreferenceChangeListener {

@Override 
public void onSharedPreferenceChanged(
     SharedPreferences sharedPreferences, String key) { 
    // TODO Auto-generated method stub 

    OBJ_COUNT = Integer.parseInt(Utility.getNoOfObjects(mContext)); 

    mScript.set_gObjectsCount(OBJ_COUNT);   
    mScript.invoke_updateObjects(); 


} 

}

Но я получил "двойные" нарисованные объекты. Мне нужно очистить существующие объекты до того, как я установил новое количество объектов.

EG. Исходное количество объектов - 10. Затем пользователь может изменить количество объектов до 5.

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

ответ

0

Наконец-то удалось исправить это ... Ничего плохого в технике. Место для обновления также корректно для onSharedPreferenceChanged. Но теперь мне удается полностью перерисовать все.

0

Я не использую RenderScript, но на моих живых обоях я сохраняю класс статических переменных для всех моих настроек и OnPreferenceChangedListener, который передает мои настройки этому классу. В моем методе рисования живых обоев я просто вытягиваю текущие значения этих статических переменных. Кроме того, когда ваши живые обои сначала запускаются, вам нужно сказать классу настроек, чтобы обновить все его переменные до текущих значений.

+0

OnPreferenceChangedListener находится в другом классе MyPreferenceActivity.java. Таким образом, это успешно вызывается, когда настройка была изменена. Но как сделать/вызвать класс CarView для обновления своего контента? О статических значениях, так что мы можем получить доступ к этим значениям, но как снова вызвать/вызывать метод draw из onPreferenceChangedListener? Мы не можем просто вызвать Car View mView = new CarView (это); setContentView (MView); изнутри onPreferenceChangedListener. – rxlky

+0

В вашей деятельности на автомобиле вы также можете зарегистрировать другой onPreferenceChangedListener в onResume() и отменить регистрацию в onPause(). У меня нет опыта работы с RenderScript, но я полагаю, что ваш слушатель может использовать класс Allocation для отправки ваших новых значений в собственный код. Я не знаю, как структурирована ваша анимация, но, вероятно, более чистая настройка метода рисования для чтения настроек из статических переменных в каждом кадре и, соответственно, корректировки с операторами if, а не для перестройки представления. Поэтому вам не нужно сообщать о том, что есть новые значения. – Tenfour04

+0

Да, на самом деле у меня нет проблем с onPreferenceChangedListener. Теперь я просто не знаю, как восстановить/перерисовать/обновить метод рисования renderscript ... Я все равно использую файл .rs. – rxlky