2011-01-20 83 views
3

有沒有辦法強制android視圖重繪它的背景? 我已經設置了一個可繪製的漸變形狀作爲背景,可以正常工作,但是在更改視圖高度後,您可以看到那些難看的漸變步驟。如何強制android視圖重繪它的背景可繪製? /可能是動畫阻止它正常工作

我該怎麼辦? 我試過view.invalidate()view.refreshDrawableState(),沒有任何明顯區別。

謝謝!

//編輯: 下面是一些更多的細節和我的代碼: 在你的答案後,我認爲綁定是我的可能不好的代碼的結果。下面是我在做什麼:

  1. 縮放視圖
  2. 設置了新的寬度和高度,因爲縮放視圖不接受在其他領域的用戶輸入那麼「老」之一(見android weird (at least for me) behaviour of control after scaling/doesn't accept input in it's whole area
  3. 試圖設置背景再次(其中包含一個梯度,並與圓角的矩形)

這裏是我的代碼:

public void onAnimationEnd(Animation animation) 
{ 
    MyView view = (MyView) ((ExtendedScaleAnimation) animation).getView(); 
    view.getLayoutParams().width = toWidth; 
    view.getLayoutParams().height = toHeight; 
    view.clearAnimation(); 
    view.requestLayout(); 
    view.refreshBackground(); // background will be changed 
} 

在設備上,您可以看到背景可繪製已更改,但存在閃爍,在我看來,像動畫結束之前應用了背景更改。以編程方式它應該結束!或者我錯了?

再次感謝您!

+1

抖動應該解決梯度條帶問題,但我不知道如何在xml中的可繪製形狀上啓用它。以編程方式,每個Drawable都有setDither(boolean)。 – bigstones 2011-01-20 14:44:33

+1

我們可能需要查看更多代碼。我會認爲view.invalidate()會工作。你可以嘗試postInvalidate,如果你碰巧不在UI線程上。 – 2011-01-20 14:44:50

回答

2

您可以嘗試調整大小後: v.setBackgroundResource(null); v.setBackgroundResource(...我的drawable ...);