0

在我的活动中,我需要使用渐变更改 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(),一切正常。如果我从代码的另一部分(如 onClick 回调)调用 myImageUpdate(),我无法设置我的背景!

* 更新 * 伙计们,这段代码很好......我在错误的(不可直接访问的)行中调用了我的方法!我很抱歉...

4

2 回答 2

0

I don't think this will fix it since you said myImageUpdate gets called within onClick... but try this..

runOnUiThread(new Runnable() {
            public void run() {
            myImage.setBackgroundDrawable(gradient);
            }
          });

you might have to make gradient variable final..

   final GradientDrawable  gradient = new GradientDrawable(GradientDrawable.Orientation.BOTTOM_TOP, colors);
于 2013-02-11T01:21:10.603 回答
0

试试 myImage.invalidate()。这将强制系统重绘视图。

于 2013-02-11T03:02:31.677 回答