2011-03-01 76 views
3

我在我的Activity上有一個View對象,我想更改視圖的背景資源。更具體地說,我想切換它。切換查看背景

所以我需要一些像這樣的邏輯:

if (myView.getBackgroundResource() == R.drawable.first) { 
    myView.setBackgroundResource(R.drawable.second); 
} 
else { 
    myView.setBackgroundResource(R.drawable.first); 
} 

的問題在這裏是沒有getBackgroundResource()方法。

我該如何獲取View用於背景的資源?

回答

0

我不認爲該視圖在從資源獲取Drawable後記得它正在使用的資源。

爲什麼不在你的活動使用實例變量,或子視圖和一個實例變量補充呢?

+0

我想我要繼承該視圖。謝謝。 – Andrew

0

僅僅擁有一個維持狀態的控制變量不是更容易嗎?讓你變得靈活並且允許你任意數量的drawable。

int[] backgrounds = { 
    R.drawable.first, 
    R.drawable.second, 
    R.drawable.third 
}; 

int currentBg; 

void switch() { 
    currentBg++; 
    currentBg %= backgrounds.length; 

    myView.setBackgroundResource(backgrounds[currentBg]); 
} 
+0

使用一個標誌將成爲一個問題,因爲這些對象在屏幕上的數量是動態的。我已經在使用View的標籤來保存其他一些數據。 – Andrew

+0

在這種情況下,我會創建一個drawable,它具有不同的正常狀態和檢查狀態的圖像,並且像這樣切換它。這是複選框的工作方式。 – EboMike

0

你可以使用一個標誌來跟蹤哪個是最後一組

private static final int FIRST_BG = 0; 
private static final int SECOND_BG = 1; 

private int mCurrentBg; 

... 

if (mCurrentBg == FIRST_BG) { 
    myView.setBackgroundResource(R.drawable.second); 
    mCurrentBg = SECOND_BG; 
} 
else { 
    myView.setBackgroundResource(R.drawable.first); 
    mCurrentBg = FIRST_BG; 
} 

你必須初始化mCurrentBg無論後臺初始設置雖然。

+0

因爲屏幕上這些對象的數量是動態的,所以使用一個標誌將會成爲一個問題。我已經在使用View的標籤來保存其他一些數據。 – Andrew

+0

我的意思是我想我可以使用地圖並使用我在每個視圖的標記中存儲的唯一數據作爲關鍵點... – Andrew

+0

如果您想使用地圖,那麼您可能只需要子類化您的按鈕(如果所有的意見是相同的類型)並在那裏嵌入國旗。但請參閱我的答案中的評論 - 更清晰的方式可能是正確使用多狀態drawable。 – EboMike

0

您可以通過getResources().getIdentifier("filename", "drawable", "com.example.android.project");函數獲取資源的ID。正如你所看到的,你將需要文件名,資源類型(drawable,layout或其他)以及它所在的包。

0

編輯:更新我的邏輯失敗。

我想你可能是能夠把setTag()getTag()方法用在這裏:

//set the background and tag initially 
View v = (View)findViewById(R.id.view); 
v.setBackgroundResource(R.drawable.first); 
v.setTag(R.drawable.first); 


if(v.getTag().equals(R.drawable.first)) { 
    v.setBackgroundResource(R.drawable.second); 
    v.setTag(R.drawable.second); 
} else { 
    v.setBackgroundResource(R.drawable.first); 
    v.setTag(R.drawable.first); 
} 

我沒有測試過這一點,但我認爲它應該工作,在理論上。不利之處在於,您必須首次手動添加標籤才能增加一些開銷,但在初始標記之後,您不必擔心跟蹤標誌。

+0

我已經在使用該標籤來存儲其他一些數據。我想我要繼承這個視圖並添加一些變量。 – Andrew

+0

啊,如果你已經在使用它,那麼最好繼承它的子類。祝你好運! – kcoppock