我正在创建一个基于河内之塔的应用程序,其中包括每个动作的动画,所有动作都不到一秒钟。我有一个选项,您可以手动解决拼图,一个程序解决拼图本身,显示所有的动画。当程序试图解决这个难题本身时,我的问题出现了。我一直试图在递归方法中使用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。单击它们时,其他方法将运行正确的动画。当我手动解决这个难题时,我没有遇到任何问题,所以我怀疑它是可点击图像或动画的问题。问题似乎是程序没有足够的时间在开始第二个动画之前完成第一个动画的执行。我的方法设置方式,如果动画在另一个完成之前尝试启动,它将崩溃。 (这在手动执行期间不是问题。)当我运行程序时,在第一个动画之前有一个很长的暂停,并且在动画完成后它会立即崩溃。那么,这是一个问题,我放置延迟,时间或其他什么?如果您需要查看更多我的代码,请询问。提前谢谢!