2013-08-23 57 views
2

我已經使用RenderScript開發了Android LWP。現在我想添加設置頁面並使用首選項來保存選項值。Android LWP,如何在設置首選項更改後刷新RenderScript對象?

EG。初始對象數量是10。然後用戶可以改變對象的數量爲20。

我不能更新/刷新/復位/調用的renderScript與新設定再生。怎麼做?

我已成功達到onSharedPreferenceChanged,但如何調用它以再生LWP新設置只需用戶點擊之後?

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
//How to force the renderscript to update here 
}  

其實,我需要知道的是「如何刷新/清除所有繪製的對象上的renderScript?」 因爲當設置已經改變了,我需要再次重新繪製的對象....

我已成功地走這麼遠的最好的事情是設置對象的數量在聽者這樣

私有類SPListener實現SharedPreferences.OnSharedPreferenceChangeListener {

@Override 
public void onSharedPreferenceChanged(
     SharedPreferences sharedPreferences, String key) { 
    // TODO Auto-generated method stub 

    OBJ_COUNT = Integer.parseInt(Utility.getNoOfObjects(mContext)); 

    mScript.set_gObjectsCount(OBJ_COUNT);   
    mScript.invoke_updateObjects(); 


} 

}

但我得到 「雙重」 繪製的對象。在設置新數量的對象之前,我需要先清除現有對象。

EG。初始物體的數量是10。然後用戶可以更改的對象數量爲5

我得到了什麼仍然是10個對象....有5個對象被繪製兩次/複製在它的上面。因此,由於繪製了這個覆蓋圖,所以有5個對象顏色較深。

回答

0

終於設法解決它......沒有錯的技術。 onSharedPreferenceChanged上的更新位置也是正確的。但我設法現在完美地重繪一切。

0

我不使用的renderScript,但在我的動態壁紙,我把一類爲我的所有設置靜態變量,那我的設置轉移到這個類的OnPreferenceChangedListener。在我的動態壁紙的繪製方法中,我只是拉動這些靜態變量的當前值。另外,當你的動態壁紙第一次啓動時,你需要告訴設置類將其所有變量更新爲當前值。

+0

OnPreferenceChangedListener是叫MyPreferenceActivity.java另一個類。所以當設置被改變時,這被成功調用。但如何使/調用CarView類來刷新其內容?關於靜態值,好吧,我們可以訪問這些值,但如何從onPreferenceChangedListener再次觸發/調用draw方法?我們不能直接調用Car View mView = new CarView(this);的setContentView(MVIEW);來自onPreferenceChangedListener。 – rxlky

+0

在您的Car活動中,您還可以在onResume()中註冊另一個onPreferenceChangedListener,並在onPause()中註銷它。我沒有任何RenderScript的經驗,但我認爲你的偵聽器可以使用Allocation類將新值發送給本機代碼。我不知道你的動畫是如何構造的,但是設置draw方法可以從每個幀的靜態變量中讀取設置並根據if語句進行相應調整,而不是重新構建視圖,這可能會更清晰。所以你的動畫不需要被告知有新的價值。 – Tenfour04

+0

是的,其實我沒有onPreferenceChangedListener問題。現在,我只是不知道如何重新生成/重繪/刷新renderscript繪製方法...無論如何我使用.rs文件。 – rxlky

相關問題