アルゴリズムの進行状況を視覚的に表現する従来のフラッド フィル アルゴリズムを実行したいと考えています。つまり、アルゴリズムのシーケンスを示すために黒に変わる一連のボタンです。再帰アルゴリズムの反復バージョンを作成してごまかすつもりはありません。不適切なタブ付き疑似コードの先:
public void floodFill(int x, int y, String targetColor,String replacementColor) {
if *out of bounds* return
else
if button = target then return
else
Switchbuttontoblack(button);
PAUSE;
floodFill(x - 1, y, targetColor, replacementColor);
floodFill(x + 1, y, targetColor, replacementColor);
floodFill(x, y - 1, targetColor, replacementColor);
floodFill(x, y + 1, targetColor, replacementColor);
}
ただし、アルゴリズムはそこで実行されますが、ボタンはアルゴリズムの最後に一度に色が変わるだけです。
これは、テキストビュー (UI) を更新する Android タイマーのように、非 UI スレッドが原因である可能性があります。
したがって、アルゴリズムの PAUSE 行にランナブルを実装しました (つまり、handler.post(runnable
);
実行可能な場所
private Runnable runnable = new Runnable() {
public void run() {
Log.d("RUNableworking","RUNableworking");
handler.postDelayed(this, 1000);
}
};
Floodfill スレッドからの実行 = 何もありません。onCreate から実行すると、ログが正常に表示されます。
私はランナブルをポーリングすることにあまり熱心ではありません。これを行うより良い方法があるはずですか?