コードを表示する前にこれを説明することはできません。
final int randomcolor = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256),
rnd.nextInt(256));
final Runnable updater = new Runnable() {
@Override
public void run() {
relativeLayout.setBackgroundColor(randomcolor);
handler.postDelayed(this, 25);
}
}
};
上には Updater という名前の実行可能ファイルがあり、下にはボタンのクリックで起動しています..
Button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
handler.postDelayed(updater,2000 );
}
});
(私は自分のコードのほとんどを切り取ったので、これを実行したい理由が理解できないかもしれません。上記は、ランナブルが抜け出せずにスタックしているため、無限ループを作成します...抜け出すことができると仮定してくださいそれ。)
コードの説明
これはすべてOncreate()にあります...したがって、ボタンをクリックすると、2秒の遅延後にRunnableが起動します...そして、25ミリ秒のギャップごとに、同じrunnableが何度も何度も実行されます。時間の終わり (私が言ったように、この最後の点は無視してください。)
ランナブルで 1 つのことを行っているだけで、相対レイアウトの背景色を変更していることがわかります。
重要なのは、25 ミリ秒ごとに、つまりランナブルが実行されるたびに、相対的なレイアウトの背景色をランダムなものに変更する必要があることです。酔っ払ったド派手なてんかん誘発アプリになりそう… 理由は任せて(また)
問題は、ハンドラーが非最終のランナブルを取得できないことです...そして、すべての実行のランダム変数を最終にすることはできず、最終と非最終は一緒に機能しません。(もう一度読んで)
したがって、ランナブルが実行されるたびに新しい Color 整数が必要です...実行されるたびに、背景色が別のランダムなものに変更されるようにします。
解決策は非常に簡単だと思いますが、特定できないようです..
アイデアはありますか?どうすればこれを行うことができますか?