在我的活动中,我需要使用渐变来更改ImageView背景,因此我使用带有透明区域的图像,在需要时更改其背景。这是一些代码:
private static View myImage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.myActivityLayout);
myImage = findViewById(R.id.myImageID);
}
[...]
private void myImageUpdate() {
GradientDrawable gradient;
int[] colors = {0xFF00FF00, 0xFF0000FF};
// I make some changes to these colors..
gradient = new GradientDrawable(GradientDrawable.Orientation.BOTTOM_TOP, colors);
myImage.setBackgroundDrawable(gradient);
}
现在,问题是: 如果我在onCreate()方法中调用myImageUpdate(),一切正常。 如果我从代码的另一部分调用myImageUpdate()(比如onClick回调),我就无法设置我的背景!
*更新* 伙计们,这段代码很好......我在一个错误的(不可直接到达的)线路上调用我的方法!我道歉......
答案 0 :(得分:0)
我不认为这会解决它,因为你说myImageUpdate在onClick中被调用...但试试这个......
runOnUiThread(new Runnable() {
public void run() {
myImage.setBackgroundDrawable(gradient);
}
});
你可能必须让梯度变量最终......
final GradientDrawable gradient = new GradientDrawable(GradientDrawable.Orientation.BOTTOM_TOP, colors);
答案 1 :(得分:0)
尝试myImage.invalidate()。这将强制系统重绘视图。