Android поделился предпочтением выбора изображения - PullRequest
0 голосов
/ 23 ноября 2011

Я делал живые обои и, наконец, до сих пор добился успеха, но теперь я хотел бы позволить пользователям выбирать фон, который они хотели бы иметь, который я имею в папке рисования. Я пробовал несколько вещей, но до сих пор не повезло, проходя через это. У меня есть XML-файл для чтения одного из двух изображений, которые они могут выбрать (я полагаю, если я смогу получить одно работающее, все они должны быть одинаковыми) Вот как это выглядит до сих пор "DarkBack" "MediumBackb" "LightBack"

<string-array name="frontleft_value">
    <item>"1"</item>
    <item>"2"</item>
    <item>"3"</item>
</string-array>bubble

Таким образом, они выбирают один из трех фонов

В деятельности у меня это:

mPrefs = UnderwaterActivity.this.getSharedPreferences(SHARED_PREFS_NAME, 0);  
mPrefs.registerOnSharedPreferenceChangeListener(this);
onSharedPreferenceChanged(mPrefs, null);
}
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
   myOtherClass.myfrontleftimage = (Integer.parseInt(prefs.getString("front_sub_left_choice", "1")));

}

Так что это должно дать мне целое число 1 или 2, в зависимости от того, какой щелчок в настройках livewallpaper. Фоновое изображение хранится в другом классе, но сначала я должен сравнить то, на что они кликнули, поэтому я попытался с помощью оператора if / else безуспешно.

Я попробовал строки, но это не сработало, поэтому я изменил их на int и мне повезло, но не всем.

Если бы еще было так.

private int chooseImage(){
   int theImage = 0;
  if(myfrontleftimage == 1){
     theImage = R.drawable.image1;
   }else if (myfrontleftimage == 2){
     theImage = R.drawable.image2;
     }else{
     theImage = R.drawable.image3;
   }
    return theImage;
 }

Затем я помещаю этот метод в фоновое изображение, чтобы он мог его прочитать, у меня есть файл настройки Java и также реализован механизм для общих настроек, но у меня есть ощущение, что это в моем операторе if else, что я хочу получить значение предпочтения и сравнить их, если они равны 1, 2, 3, если один из них равен одному из них, то он загружает это фоновое изображение, имеет смысл в теории, но не на практике, очевидно, любая помощь будет принята с благодарностью, если я могу понять это, тогда я могу использовать его для спрайтов, которые есть у меня в живых обоях. Заранее спасибо

EDIT: Я обнаружил проблему до сих пор, я положил в файл pref это:

<string-array name="livewallpaper_back_names">
    <item>Brown</item>
    <item>Grey</item>
</string-array>

<string-array name="livewallpaper_back_value">
    <item>0x7f020000</item>
    <item>0x7f020001</item>
</string-array>

Затем в файле sharedpreferences я пытаюсь разобрать 0x7f020000 (который я хочу использовать для выбора изображения) в int, например, так:

public void onSharedPreferenceChanged(SharedPreferences prefs,
            String key)
    {
              sackNum = Integer.parseInt(prefs.getString("livewallpaper_back", "0x7f020000"));
             }

Но тогда я получаю эту ошибку, что это не может быть сделано

E/AndroidRuntime(340): java.lang.NumberFormatException: unable to parse '0x7f020000' as integer

Так вот где я застрял на данный момент. Я проверил журнал, и массив действительно прошел и не меняет проблему, так что именно в этом и заключается проблема, и если кто-то может помочь мне разобрать эту вещь в int, я был бы очень признателен. Еще раз спасибо за любую помощь заранее.

Ответы [ 2 ]

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

Хорошо, я понял это с помощью примера тестового шаблона, найденного здесь: http://www.codeproject.com/KB/android/AndroidLiveWallpaper.aspx

Сначала я добавляю третью глубину к массиву .xml как

<string-array name="livewallpaper_back_names">
<item>Brown</item>
<item>Grey</item>
</string-array>

<string-array name="livewallpaper_back_value">
<item>brown</item>
<item>grey</item>
</string-array>

<integer-array name="brownback">
<item>0x7f020000</item>
</integer-array>

<integer-array name="greyback">
<item>0x7f020001</item>
</integer-array>

Тактеперь он будет читать коричневый или серый, затем я добавляю getResources (). getIdentifier, чтобы получить массив, который пользователь выбирает в меню настроек livewallpaper, например:

public void onSharedPreferenceChanged(SharedPreferences prefs, String key)
    {

        String blah;
        sackNum = prefs.getString("livewallpaper_back", "brown");

        int pid = getResources().getIdentifier(sackNum + "back", "array", getPackageName());
        int backImageArray[] = getResources().getIntArray(pid);
        int back = backImageArray[0];
        int theBackImage = back;
        blah = getString(back);
        Log.d(TAG, blah);

    }

int pid собирает массивлибо коричневый, либо серый путем добавления обратно (в xml) и получения массива, который я затем помещаю в backImageArray, выбирая только первый, потому что это единственный, затем я изменяю массив на целое число (int back = backImageArray [0];) поэтому его можно прочитать, чтобы получить изображение, выбранное пользователем, которое будет theBackImage, или вы можете просто вставить его прямо в растровое изображение как таковое

private Bitmap _backgroundImage = BitmapFactory.decodeResource(getResources(),theBackImage);

и предварительно получить изображение.Если у кого-то есть лучший способ сделать это, пожалуйста, добавьте к этому, но пока это работает, имейте в виду, что вам нужно обновить код, чтобы он читал его и изменял сразу, но это ответ, который я понял, чтобы заставить пользователяпо крайней мере, выберите изображение.Надеюсь, это поможет кому-то еще.Сэм

0 голосов
/ 23 ноября 2011

Вы прослушиваете изменения общих настроек, но, похоже, не устанавливаете их.

Установите charedPreferences, используя и редактор, когда пользователь делает выбор.

Затем в своей деятельности прочитайте общие предпочтения в методе onCreate (). Таким образом, он будет проверять сохраненную ссылку при каждом запуске действия.

Код для редактирования настроек выглядит примерно так:

public void onClick(DialogInterface dialog, int whichButton) {
                    SharedPreferences settings = getSharedPreferences("YOURPREFERENCENAME", 0);
                    SharedPreferences.Editor editor = settings.edit();
                    editor.putString("name", "MyNameIsBob");
                    editor.putString("password", "MyPasswordIsEasy");
                    editor.commit();
                }

В вашем onCreate вы бы сделали что-то вроде этого:

// Get any existing username and password saved
        // Restore preferences
           SharedPreferences settings = getSharedPreferences("YOURPREFERENCENAME", 0);
           user_name = settings.getString("name", "defaultNameValue");
           password = settings.getString("password", "defaultPasswordValue");
...