1

これが私の最初の質問です、私はそれを正しくやることを願っています。特定の間隔でいくつかのボタンの色を変更する必要があります。

setBackgroundメソッドを使用するとボタンが見苦しく見えるため、Colorfilterを使用してこれを行うことにしました。

問題は次のとおりです。Runnable内でColorFilterを設定すると、機能しません

ただし、onCreateまたはclickメソッドでのColorFilterの設定は機能してます。そして:Runnable内でsetBackgroundColorを使用してBackgroundColorを設定することは機能しています。

言及するのを忘れました。Android4.1ではエミュレーターで実行し、2.3.3では実行しない場合は、すべて正常に機能します。

何か案は?これがコードです

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }


    int counter = 0;
    Button b = null;

    final Handler handler = new Handler();
    final Runnable doit = new Runnable() {
        public void run() {

            if ( counter % 2 == 0) {
                b = (Button) findViewById(R.id.button1);
                b.setBackgroundColor(0xffff0000);  // working
                //b.getBackground().setColorFilter(0xFFD2691E, PorterDuff.Mode.MULTIPLY);   // doesnt work
            }
            else {
                //b.getBackground().clearColorFilter(); 
                b.setBackgroundColor(0xff00ff00);
            }
            counter++;
        }
    };

    public void click(View view) {
        // configure timer 1
        Timer timer = new Timer();
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                handler.post(doit);
            }
        };

        timer.schedule(task, 1111, 1111);
    }
}
4

1 に答える 1

0

イメージビューでも同じ問題がありました。解決策を見つけました。invalidate() メソッドを呼び出す必要があります。

ImageView img =(ImageView) findViewById(R.id.myimageview);
img.getDrawable().clearColorFilter();
img.invalidate();
于 2014-09-18T07:35:45.693 に答える