2011-03-07 63 views
1

爲了讓您對我的問題的一些背景我已經花了很多時間在這個問題上,但最讓我問的問題與我想會的工作不同的方式,但我從來沒有實際上問什麼是最簡單的方法來做到這一點。的Android,如何改變同一個活動裏面的背景顏色

爲了顯示我已經完成的工作量,這裏有我在嘗試不同的方法來完成這個任務貼幾張堆棧溢出的問題。

最後這裏有一些我已經試過的東西。 我最初的反應是,這將是非常容易的,我可以每次我想改變,但顯然這是不是這樣的時候只需要調用的setContentView。 其次,我試過設置不同的事情bacgkround,編輯該對象,並希望它會改變。沒有工作。 接下來我看着成的Android提供了諸如

ViewFlippers事情:我可以改變一切,但不是背景。

狀態列表可繪製:我不是很擅長實施它們,這可能是我的錯嗎?

幀通過框架動畫:注意我有一個關於它的堆棧溢出問題...需要更多?

不用說了,我已經意識到我 試圖太難做,因爲任務 應該只需要3-5行的代碼。所以 我在徵求建議。

回答

0

我的解決方案是創建一個自定義視圖對象。這裏的關鍵將覆蓋onDraw函數,在該函數中只需在畫布上繪製所需的顏色。它應該很容易。

請試試這個,讓我知道,如果你有任何問題......這裏有一些指點...

在視圖對象...

public class MyView extends View { 
    @Override protected void onDraw(Canvas canvas) { 
    canvas.drawColor(mColor); 
    } 

    private int mColor = 0xff000000; //black 
    public void SetColor(int aColor) { 
    mColor = aColor; 
    invalidate(); //Not sure about this line, can't remember if this is the correct call... there is a call that causes a redraw 
    } 
} 

在你的活動佈局XML。 ..

<your.package.name.ClassName 
    android:id="@+id/ClassName1" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent"/> 

在你的活動代碼...

@Override public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.yourxmllayoutfile); 
    MyView aMyView = (MyView) findViewById(R.id.ClassName1); 
    aMyView.SetColor(0xff00ff00); //Green I think, this line changes the color 
} 

好運:)

+0

好了,我還沒有時間去檢查這個問題直到剛纔。我會玩弄它,讓你知道它是如何去的。 – Craig 2011-03-13 07:02:53

+0

您能否向我解釋爲什麼xml中需要包和類名?我不明白xml文件中發生了什麼。我得到身份證,身高和佈局,但我不明白那些似乎在做所有工作的部分。此外,我假設當你把「你的類名」,你指的是自定義Java視圖文件的類名稱? – Craig 2011-03-13 07:55:35

+0

是...基本上在我的例子中,我調用了自定義View Class'MyView'。我希望你會把它稱爲別的東西,所以你需要用你稱之爲類的東西來替換它(這正好是Java用作文件名的東西)。您需要爲Android SDK中未定義的任何View對象指定Pakage名稱。 – CatalystNZ 2011-03-15 03:11:28