Как я могу использовать Общие настройки, чтобы правильно установить новое изображение? - PullRequest
0 голосов
/ 29 ноября 2011

Я использую AndEngine для создания живых обоев, и у меня все настроено правильно, чтобы появилось меню «Настройки». Я просто не уверен, как на самом деле отключить текущие изображения, которые загружаются по умолчанию, с изображениями, которые пользователи могут выбрать в меню «Настройки».

Пример: По умолчанию программа загружает фоновое изображение2 и изображение верхнего слоя 1. Если пользователь выбирает использовать фоновое изображение 3 через меню «Настройки», я бы хотел, чтобы изображение 3 заменило изображение 2.

Вот мой основной код:

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)
    {

    }


}    

Я не уверен, что нужно добавить после:

prefs = PhysicsWallpaperActivity.this.getSharedPreferences(SHARED_PREFS_NAME, 0);
        prefs.registerOnSharedPreferenceChangeListener(this);

Вот мой файл preference.xml с актуальным меню настроек:

<?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>

Наверное, мой главный вопрос: как мне загрузить новую картинку, которую выбрал пользователь, и затем применить ее к реальным обоям?

1 Ответ

0 голосов
/ 04 декабря 2011

Найден раствор:

Создано это:

    @Override
    public void onSharedPreferenceChanged(SharedPreferences pSharedPrefs, String pKey)
    {           
            settingsChanged = true;
    }

Добавлено:

    @Override
    public void onResume(){
        super.onResume();
        if(settingsChanged)
        {
                BuildScene();
                settingsChanged = false;
        }
    }

(BuildScene ()) - это вызов внутри моего метода onLoadScene ().)

Затем я просто создал пользовательские операторы If, Else внутри метода BuildScene (), чтобы выяснить, какой параметр использует пользователь, а затем применил новое изображение.

...