2011-11-23 153 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