2013-11-28 5 views
0

Я создаю livewallpaper с andengine. мой проект есть два классаОбновление живых обоев после изменения настроек

public class LiveWallpaperMain extends BaseLiveWallpaperService implements SharedPreferences.OnSharedPreferenceChangeListener 
{ 

//Other methods 

    public void onCreateScene(OnCreateSceneCallback pOnCreateSceneCallback) 
      throws Exception { 
     // TODO Auto-generated method stub 
     this.mEngine.registerUpdateHandler(new FPSLogger()); 
     scene = new Scene(); 


     if(snowDensity == 5) 
      snowDensityValue = 50; 
     else if(snowDensity == 10) 
      snowDensityValue = 200; 
     else 
      snowDensityValue = 500; 
     particleSystem = new BatchedPseudoSpriteParticleSystem(
       new RectangleParticleEmitter(CAMERA_WIDTH/2, 0, CAMERA_WIDTH, CAMERA_HEIGHT), 
       2, 5, snowDensityValue, mSnowParticleRegion, vbom); 
     particleSystem.setBlendFunction(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE); 
     particleSystem.addParticleInitializer(new VelocityParticleInitializer<Entity>(-3, 3, 20, 40)); 
     particleSystem.addParticleInitializer(new AccelerationParticleInitializer<Entity>(-3, 3, 3, 5)); 
     particleSystem.addParticleInitializer(new RotationParticleInitializer<Entity>(0.0f, 360.0f)); 
     particleSystem.addParticleInitializer(new org.andengine.entity.particle.modifier.ExpireParticleInitializer<Entity>(15f)); 
     particleSystem.addParticleInitializer(new ScaleParticleInitializer<Entity>(0.5f, 0.9f)); 
     particleSystem.addParticleInitializer(new RegisterXSwingEntityModifierInitializer<Entity>(15f, 0f, (float) Math.PI * 8, 3f, 25f, true)); 

     particleSystem.addParticleModifier(new AlphaParticleModifier<Entity>(10f, 15f, 1.0f, 0.0f)); 
    Log.e("LiveWallpaperSettings", "Density " + snowDensityValue); 



    pOnCreateSceneCallback.onCreateSceneFinished(scene); 
} 

}

И это класс Настройки

public class LiveWallpaperSettings extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener 
{ 
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) 
    { 
     SharedPreferences customSharedPreference = getSharedPreferences(key, MODE_PRIVATE); 
     SharedPreferences.Editor editor = customSharedPreference.edit(); 
     editor.putString("Speed",listPreference.getValue()); 
     editor.commit(); 
     Log.e("LiveWallpaperSettings", "currvalue " + listPreference.getValue()); 
     currValue = listPreference.getValue(); 
    } 
} 

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

+0

Способ применения метода частиц и немедленно вызвать этот метод при выходе с этого экрана. – Rama

+0

образец кода был бы более полезным. –

ответ

2

Прежде всего, вам не нужно реализовывать OnSharedPreferenceChangeListener в вашем классе LiveWallpaperSettings. Если у вас есть ключи предпочтений, правильно определенные в XML-файле, значения будут сохранены автоматически. Ваш класс должен выглядеть следующим образом:

public class LiveWallpaperSettings extends PreferenceActivity { 

    @Override 
    protected void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     getPreferenceManager().setSharedPreferencesName("shared-preference-file-name"); 
     addPreferencesFromResource(R.xml.settings); // this is xml with PreferenceScreen element 
    } 
} 

Реализовать OnSharedPreferenceChangeListener в классе LiveWallpaperMain. Реализация должна выглядеть так:

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
     if ("snow-density-key-name-from-xml".equals(key)) { 
      // here call the method to update snow density 
     } 
    } 
+0

У меня есть метод onSharedPreferenceChanged (....) в моем основном классе, но он никогда не вызывается. Метод onSharedPreferenceChanged класса настроек вызывается каждый раз, когда я что-то меняю. любая идея почему? –

+0

Конечно. Вероятно, вы не зарегистрировали свой LiveWallpaperMain как прослушиватель onSharedPreferenceChanged. Обязательно зарегистрируйте его, вызвав: context.getSharedPreferences («shared-preference-file-name», Context.MODE_PRIVATE) .registerOnSharedPreferenceChangeListener (liveWallpaperMainObject); –

+0

Да, это была проблема и сейчас решена. Спасибо всем вам за вашу помощь. –

Смежные вопросы