2011-11-23 114 views
0

我一直在做一个动态壁纸,并最终成功为止,但现在我想,让用户选择他们想有我在绘制文件夹的背景。 我一直在尝试一些东西,但迄今为止没有运气通过这一点。 我有一个XML文件中读取他们可以从中选择两个图像之一(我想如果我能得到一个工作,他们都应该是相同的) 下面是它的读取到目前为止 “DarkBack” “MediumBackb” “ LightBack” Android的共享偏好选择图像

<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 else是这样进行的。

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,如果其中任何一个等于它们中的一个然后加载该背景图像,则将它们进行比较,在理论上是有意义的,但在实践中显然不明显,任何帮助将会很大我很感激,如果我能找出这一个,那么我也可以用它来制作精灵,这也是我在动态壁纸中所使用的。 在此先感谢

编辑: 我发现这个问题,到目前为止,我把在首选项文件这样的:

<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,我将不胜感激。 再次感谢您提前提供任何帮助。

+0

好吧,我想通了与的testpattern例子的帮助谁使用它可以在这里找到的十六进制代码:http://www.codeproject.com/KB/android/AndroidLiveWallpaper.aspx – user870286

回答

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通过添加back(在xml中)来获取数组,然后我将数组放到backImageArray中,只选择第一个,因为这是唯一的,接下来我将数组更改为整数(int back = backImageArray [0];)所以它可以被读取以获得用户选择的图像,这将是BackImage,或者你可以直接将它放到位图中,因此

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

然后它就会获得图像。如果任何人有更好的方式做到这一点,请添加到此,但到目前为止这工作,请注意,你必须在代码中更新,以便它读取并立即更改,但这是我想出让用户至少选择图像。 希望它能帮助别人。 山姆

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

都能跟得上未工作抱歉。我有三种选择,他们可以在动态壁纸的设置中进行到目前为止让图像无法为我工作,但我会继续堵塞它。 – user870286