我正在制作一个游戏,有人点击后,一个球在屏幕上移动,这需要一些时间。我正在尝试在球停止移动后做一个方法。我试着睡觉,但没用。我也看了asynctask,但并不完全理解它。有人能给我指明正确的方向吗?或者告诉我如何在代码中使用asynctask,谢谢。我真的是新手,所以任何事情都会有所帮助。
第一部分是Main类,它有游戏中动作的代码。afterKick()方法是我希望在kick()完成后执行的操作。
final FrameLayout main = (FrameLayout) findViewById(R.id.main_view);
main.setBackground(this.getResources().getDrawable(R.drawable.field));
newBall = new Ball(this);
main.addView(newBall);
main.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
float x = event.getX();
float y = event.getY();
System.out.println("x:" + x + " y" + y);
if(kick == false && attempt<10)
{
setHeight(y, newBall);
kick(x,y,newBall,main);
}
afterKick();
// TODO Auto-generated method stub
return false;
}
});
一旦调用了kick()方法,它就会转到创建球的类。onDraw方法不断重复,直到球不再因无效而被重新绘制。
@Override
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
canvas.drawBitmap(scaled, left, top, null);
if(topMax>=top)
{
setDone(true);
}
else if(straight == true && top> topMax)
{
kickStraight();
}
else if(righty == true && top>topMax)
{
kickRight();
}
else if(midRight == true && top>topMax)
{
kickMidRight();
}
else if(midLeft == true && top>topMax)
{
kickMidLeft();
}
else if(lefty == true && top>topMax)
{
kickLeft();
}
invalidate();
}
我想不出在invalid不再重新启动onDraw方法后该怎么做。任何帮助都是有用的,谢谢!
AsyncTask有一个get方法,它将强制程序等待AsyncTask的输出,然后再继续。您可以做的是让AsyncTask在完成时返回一个值,并在调用线程中将该值分配给一个变量。
AsyncTask task = new AsyncTask().execute(params);
Object output = task.get();
但是,使用get方法会阻塞UI线程。一个更安全(更好)的替代方法是使用AsyncTask的onPostExecute方法。这将在doInBackground方法完成后调用,并将在主UI线程上运行。