Wie kann ich gemeinsame Einstellungen verwenden, um ein neues Bild richtig festzulegen?
-
25-10-2019 - |
Frage
Ich benutze Andengine, um ein Live -Hintergrundbild zu erstellen, und habe alles auf den richtigen Weg, um das Einstellungsmenü zu finden. Ich bin mir einfach nicht sicher, wie ich tatsächlich die aktuellen Bilder ausschaltet, die standardmäßig mit Bildern geladen werden, die Benutzer im Menü Einstellungen auswählen können.
Beispiel: Standardmäßig lädt das Programm das Hintergrundbild2 und das Bild mit oberem Ebenen 1. Wenn ein Benutzer das Hintergrundbild 3 über das Einstellungsmenü verwendet, möchte ich Image3 im Bild2 ersetzen.
Hier ist mein Hauptcode:
public class PhysicsWallpaperActivity extends BaseLiveWallpaperService implements SharedPreferences.OnSharedPreferenceChangeListener {
// ===========================================================
// Constants
// ===========================================================
public static final String SHARED_PREFS_NAME = "preferences";
private static final int CAMERA_WIDTH = 720;
private static final int CAMERA_HEIGHT = 480;
// ===========================================================
// Fields
// ===========================================================
private Camera mCamera;
private BitmapTextureAtlas mAutoParallaxBackgroundTexture;
private TextureRegion mParallaxLayerBack;
private TextureRegion mParallaxLayerFront;
private SharedPreferences prefs;
@Override
public org.anddev.andengine.engine.Engine onLoadEngine() {
this.mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
return new org.anddev.andengine.engine.Engine(new EngineOptions(true, ScreenOrientation.PORTRAIT, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), this.mCamera));
}
@Override
public void onLoadResources() {
prefs = PhysicsWallpaperActivity.this.getSharedPreferences(SHARED_PREFS_NAME, 0);
prefs.registerOnSharedPreferenceChangeListener(this);
BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");
this.mAutoParallaxBackgroundTexture = new BitmapTextureAtlas(2048, 2048, TextureOptions.DEFAULT);
this.mParallaxLayerFront = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mAutoParallaxBackgroundTexture, this, "image1.png", 0, 800);
this.mParallaxLayerBack = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mAutoParallaxBackgroundTexture, this, "image2.jpg", 0, 0);
this.mEngine.getTextureManager().loadTextures(this.mAutoParallaxBackgroundTexture);
}
@Override
public Scene onLoadScene() {
this.mEngine.registerUpdateHandler(new FPSLogger());
final Scene scene = new Scene();
final AutoParallaxBackground autoParallaxBackground = new AutoParallaxBackground(0, 0, 0, 5);
autoParallaxBackground.attachParallaxEntity(new ParallaxEntity(-10.0f, new Sprite(0, CAMERA_HEIGHT - this.mParallaxLayerBack.getHeight(), this.mParallaxLayerBack)));
autoParallaxBackground.attachParallaxEntity(new ParallaxEntity(0.0f, new Sprite(0, CAMERA_HEIGHT - this.mParallaxLayerFront.getHeight(), this.mParallaxLayerFront)));
scene.setBackground(autoParallaxBackground);
return scene;
}
....
....
@Override
public void onSharedPreferenceChanged(SharedPreferences pSharedPrefs, String pKey)
{
}
}
Ich bin mir nicht sicher, was danach hinzugefügt werden muss:
prefs = PhysicsWallpaperActivity.this.getSharedPreferences(SHARED_PREFS_NAME, 0);
prefs.registerOnSharedPreferenceChangeListener(this);
Hier ist meine Präferenz.xml -Datei, die das tatsächliche Einstellungsmenü enthält:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="Main Settings">
<ListPreference
android:title="List Preference"
android:summary="This preference allows to select an item in an array"
android:key="listPref"
android:defaultValue="1"
android:entries="@array/background"
android:entryValues="@array/background_values" />
</PreferenceCategory>
</PreferenceScreen>
Ich denke, meine Hauptfrage ist, wie ich das neue Bild, das der Benutzer ausgewählt hat, und dann auf das eigentliche Hintergrundbild lade.
Lösung
Fand die Soulution:
Erstellt dies:
@Override
public void onSharedPreferenceChanged(SharedPreferences pSharedPrefs, String pKey)
{
settingsChanged = true;
}
Hinzugefügt:
@Override
public void onResume(){
super.onResume();
if(settingsChanged)
{
BuildScene();
settingsChanged = false;
}
}
(Buildscene ()) ist ein Aufruf in meiner Onloadscene () -Methode.)
Dann habe ich nur benutzerdefiniert, wenn Anweisungen in der Methode Buildscene () herausgefunden werden, welche Option der Benutzer derzeit verwendet, und dann das neue Bild angewendet.