1

我正在创建一个基于河内塔的应用程序,其中包括每个动作的动画,所有动作都不到一秒。我有一种选择,您可以手动解决难题,另一种选择是程序自行解决难题,显示所有动画。当程序尝试自行解决难题时,就会出现我的问题。我一直在尝试handler.postDelayed在拼图使用的递归方法中使用,以便在尝试开始下一个动画之前给每个动画时间完成:

int autoSolveCount = 0;

public void playHanoi(int n, String from , String other, String to) {
    Handler handler = new Handler();
    if (n == 0)
    {
        autoSolveCount++;
        return;
    }
    if (n > 0){
        playHanoi(n-1, from, to, other);
        image.get(from).performClick();
        image.get(to).performClick();
        handler.postDelayed(new RunAutoSolve(n-1, other, from, to), 1000*(autoSolveCount+1));
    }
}

public class RunAutoSolve implements Runnable{

    int num;
    String other = "";
    String from = "";
    String to = "";

    public RunAutoSolve(int n, String o, String f, String t){
        num = n;
        other = o;
        from = f;
        to = t;
    }

    @Override
    public void run(){
        playHanoi(num, other, from, to);
    }
}

image.get(to)image.get(from)为目标塔返回一个可点击的 ImageView。单击它们时,其他方法会运行正确的动画。当我手动解决难题时,我没有遇到任何问题,所以我怀疑这是可点击图像或动画的问题。问题似乎是程序没有足够的时间在开始第二个动画之前完成第一个动画的执行。按照我的方法设置方式,如果一个动画在另一个动画完成之前尝试开始,它会崩溃。(这在手动执行期间不是问题。)当我运行程序时,在第一个动画之前有很长的停顿,并且在该动画完成后立即崩溃。那么,这是我放置延迟、时间或其他东西的问题吗?如果您需要查看更多我的代码,请询问。提前致谢!

4

0 回答 0