Android共享首选项选择图片

时间:2011-11-23 02:04:11

标签: android sprite sharedpreferences

我一直在制作动态壁纸并且到目前为止终于成功了,但是现在我想让用户选择他们想要在drawable文件夹中拥有的背景。 我一直在尝试一些事情,但到目前为止没有运气通过这一切。 我有一个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并运气好但不是全部。

if if就是这样。

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则比较它们,如果任何一个等于其中一个然后它加载那个背景图像,理论上有意义但实际上没有明显的意义,任何帮助都会非常感激,如果我可以想出这一个然后我可以用它作为我在livewallpaper中的精灵。 提前致谢

编辑: 到目前为止我找到了这个问题,我在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

所以这就是我现在被困住的地方。 我检查了日志,数组确实通过并且没有任何问题,所以这就是问题所在,如果有人可以帮我解析这个东西我会非常感激。 再次感谢您的任何帮助。

2 个答案:

答案 0 :(得分:0)

您正在侦听共享偏好设置更改,但您似乎没有设置它们。

当用户进行选择时,使用和编辑设置charedPreferences。

然后在您的活动中,阅读onCreate()方法中的共享首选项。这样,它将在每次活动开始时检查savedPreference。

编辑首选项的代码如下:

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");

答案 1 :(得分:0)

好的,我在这里找到的测试模式示例的帮助下想出了这个:http://www.codeproject.com/KB/android/AndroidLiveWallpaper.aspx

首先,我向array.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,或者你可以将它直接放入Bitmap中

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

并预先获取图像。如果有人有更好的方法,请添加到此,但到目前为止这是有效的,请注意你必须在代码中更新,以便它读取并立即更改它但这是我想出的答案让用户至少选择图像。 希望它可以帮助其他人。 萨姆