我已将设置添加到我的动态壁纸,但更改时它们不会被应用。如果有人能告诉我为什么我的设置在更改时没有被应用,我将不胜感激。这是我的代码:
设置.xml
<PreferenceCategory android:title="@string/more">
<PreferenceScreen android:title="@string/more">
<intent android:action="android.intent.action.VIEW"
android:data="market://search?q=pub:PSP Demo Center" />
</PreferenceScreen>
<ListPreference
android:persistent="true"
android:enabled="true"
android:entries="@array/settings_light_number_options"
android:title="@string/settings_light_number"
android:key="light_power"
android:summary="@string/settings_light_number_summary"
android:defaultValue="3"
android:entryValues="@array/settings_light_number_optionvalues" />
<ListPreference
android:persistent="true"
android:enabled="false"
android:entries="@array/settings_speed_number_options"
android:title="@string/settings_speed_number"
android:key="speed"
android:summary="@string/settings_speed_number_summary"
android:defaultValue="10"
android:entryValues="@array/settings_speed_number_optionvalues" />
<ListPreference
android:persistent="true"
android:enabled="false"
android:entries="@array/settings_rotate_number_options"
android:title="@string/settings_rotate_number"
android:key="rotate"
android:summary="@string/settings_rotate_number_summary"
android:defaultValue="8000"
android:entryValues="@array/settings_rotate_number_optionvalues" />
</PreferenceCategory>
</PreferenceScreen>
设置.java
public class GraffitiLWPSettings extends PreferenceActivity
implements SharedPreferences
.OnSharedPreferenceChangeListener {
public static final String SHARED_PREFS_NAME = "wallpaper_settings";
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
getPreferenceManager().
setSharedPreferencesName(GraffitiLWP.SHARED_PREFS_NAME);
addPreferencesFromResource(R.xml.settings);
getPreferenceManager().getSharedPreferences().
registerOnSharedPreferenceChangeListener(this);
}
protected void onResume() {
super.onResume();
}
protected void onDestroy() {
getPreferenceManager().getSharedPreferences()
.unregisterOnSharedPreferenceChangeListener(this);
super.onDestroy();
}
public void onSharedPreferenceChanged(SharedPreferences
sharedPreferences, String key) {
}
}
壁纸.java
public class GraffitiLWP extends Wallpaper {
private GraffitiLWPRenderer mRenderer;
public static final String SHARED_PREFS_NAME = "wallpaper_settings";
public Engine onCreateEngine() {
mRenderer = new GraffitiLWPRenderer(this);
return new WallpaperEngine(
this.getSharedPreferences(SHARED_PREFS_NAME,
Context.MODE_PRIVATE), getBaseContext(), mRenderer);
}
}
渲染器.java
public class GraffitiLWPRenderer extends RajawaliRenderer {
private Animation3D mAnim;
private BaseObject3D mCan;
private SettingsUpdater settingsUpdater;
//private SharedPreferences preferences;
public GraffitiLWPRenderer(Context context) {
super(context);
setFrameRate(20);
}
public class SettingsUpdater implements SharedPreferences
.OnSharedPreferenceChangeListener {
private GraffitiLWPRenderer renderer;
public SettingsUpdater(GraffitiLWPRenderer renderer)
{
this.renderer = renderer;
}
public void onSharedPreferenceChanged(
SharedPreferences sharedPreferences, String key) {
preferences.getInt("wallpaper_settings", 0);
renderer.setSharedPreferences(preferences);
}
}
public void initScene() {
System.gc();
ALight light = new DirectionalLight();
light.setPower(this.preferences.getLong("light_power", 3));
light.setPosition(0, 0, -10);
mCamera.setPosition(0, -1, -7);
mCamera.setLookAt(0, 2, 0);
mCamera.setFarPlane(1000);
ObjParser parser = new ObjParser(mContext
.getResources(), mTextureManager, R.raw.spraycan_obj);
parser.parse();
mCan = parser.getParsedObject();
mCan.addLight(light);
mCan.setScale(1.2f);
addChild(mCan);
Number3D axis = new Number3D(0,
this.preferences.getLong("speed", 10), 0);
axis.normalize();
mAnim = new RotateAnimation3D(axis, 360);
mAnim.setDuration(this.preferences.getLong("rotate", 8000));
mAnim.setRepeatCount(Animation3D.INFINITE);
mAnim.setInterpolator(new AccelerateDecelerateInterpolator());
mAnim.setTransformable3D(mCan);
setSkybox(R.drawable.posz, R.drawable.posx,
R.drawable.negz, R.drawable.negx, R.drawable.posy,
R.drawable.negy);
}
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
settingsUpdater = new SettingsUpdater(this);
this.preferences.registerOnSharedPreferenceChangeListener(
settingsUpdater);
settingsUpdater.onSharedPreferenceChanged(preferences, null);
super.onSurfaceCreated(gl, config);
mAnim.start();
}
public void onDrawFrame(GL10 glUnused) {
super.onDrawFrame(glUnused);
mSkybox.setRotY(mSkybox.getRotY() + .5f);
}
}
我知道代码很长,但我将非常感谢有人能给我的任何帮助。谢谢你。