1

我想运行一个经典的洪水填充算法,它可以直观地表示算法的进展情况;即一系列变黑的按钮以显示算法的顺序。我不想通过生成递归算法的迭代版本来作弊。P oorly 选项卡式伪代码前面:

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);
}

但是,虽然算法在那里执行,但按钮只会在算法结束时一次性改变颜色。

这可能是由于在Android 计时器中更新 textview (UI)时的非 UI 线程。

因此,我在算法的 PAUSE 行(即 handler.post
(runnable);

可运行在哪里

private Runnable runnable = new Runnable() {
       public void run() {

            Log.d("RUNableworking","RUNableworking");
            handler.postDelayed(this, 1000);

       }
    };

从 Floodfill 线程运行 = 没有。从 onCreate 运行我看到日志很好。

我不太热衷于轮询可运行文件;必须有更好的方法来做到这一点?

4

1 回答 1

1

Activity 中有一个名为 runOnUiThread() 的命令,它非常方便。唯一的问题是正在运行的 UI 排队。您还可以使用 Handler 对象将 UI 更新调用发送到 UI 线程。

但是,如果您要一步一步进行,您真的需要使用另一个线程吗?

更新:您是否在 onDraw() 中进行洪水填充?如果是这样,它不会一步一步来

于 2012-11-05T14:00:37.767 回答