2011-01-20 64 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 ...);