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() を呼び出すと、背景を設定できません!

* UPDATE * 皆さん、このコードは問題ありません...間違った (直接到達できない) 行でメソッドを呼び出していました! 謝罪いたします...

4

2 に答える 2

0

onClick 内で myImageUpdate が呼び出されると言ったので、これで修正されるとは思いませんが、これを試してください..

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

勾配変数を最終にする必要があるかもしれません..

   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 に答える