2013-10-03 20 views
1

在Android中,我有一個擴展View的類。在某些情況下,我希望它不會自己畫。我意識到我可以將ViewVisibility()設置爲View.INVISIBLE或View.GONE,但如果可能的話我寧願避免。如果這個自定義視圖是或不可見的,還有其他代碼部分的行爲會有所不同,如果我不需要,我不想重寫那些。如何防止Android視圖繪製其背景

原本我以爲這將是壓倒一切作爲的onDraw(),類似於以下容易...

@Override 
protected void onDraw(Canvas canvas) { 
    if(...){ //check some member variables 
     return; 
    } else { 
     //draw code 
    } 
} 

這個工作對大多數的觀點,但我發現,背景仍然會出現不管我的有條件檢查的結果如何。閱讀docs了一下,我發現這個...

「繪畫是通過遍歷樹和渲染相交的無效區域每個視圖。因爲樹是有序遍歷處理後,這意味着父母會在他們的孩子之前(即在他們的後面)繪製,並且兄弟姐妹按照它們出現在樹中的順序繪製。如果你爲一個View設置了一個可繪製的背景,那麼這個View會在你調用它的onDraw()方法之前爲你繪製。 「

我想出瞭解決的辦法是一個黑客位的...

@Override 
protected void onDraw(Canvas canvas) { 
    if(...){ //check some member variables 
     //set background to transparent 
     return; 
    } else { 
     //restore default background 
     //draw code 
    } 
} 

所以我想我的問題是這樣的:有什麼辦法來替代默認背景繪製行爲視圖這樣我就不必更改視圖的可見性或背景了?

+4

使視圖不呈現本身是非常相似,使其不可見。我沒有看到爲什麼沒有可見性系統的原因,因爲它已經存在和所有。 – njzk2

+0

假設,例如,我想以不同的方式繪製它(而不是繪製它)。有沒有辦法在條件上進行分支並以兩種截然不同的方式繪製背景? –

+1

你不能在這種情況下改變背景嗎? – Geobits

回答

3

draw()方法中繪製背景,而不是onDraw()方法。你可以重寫這個,但它不僅僅是繪製背景,而且確實不是一個真正的選擇。

根據以上評論,您最好的選擇是以編程方式更改背景。

編輯:所以是的,你可以覆蓋draw()並覆蓋背景之前調用super.draw()