Android 单击按钮停止移动球
我有一个从一开始就不断移动的球。我想按一下按钮停止球。当我点击按钮时,它显示了祝酒词,但球继续移动。它不会停止 请指导我如何停止按钮点击球。我的活动代码在那里Android 单击按钮停止移动球,android,Android,我有一个从一开始就不断移动的球。我想按一下按钮停止球。当我点击按钮时,它显示了祝酒词,但球继续移动。它不会停止 请指导我如何停止按钮点击球。我的活动代码在那里 @SuppressLint("HandlerLeak") public class BounceActivity extends Activity { private static final int GAME_START = 500; private static final int GAME_STOP = 600;
@SuppressLint("HandlerLeak")
public class BounceActivity extends Activity {
private static final int GAME_START = 500;
private static final int GAME_STOP = 600;
Thread myRefreshThread = null;
BounceView myBounceView = null;
int width = 0;
int height = 0;
Handler myGUIUpdateHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case BounceActivity.GAME_START:
myBounceView.invalidate();
break;
case BounceActivity.GAME_STOP:
Log.d("BounceView", "Game state: " + BounceView.game_state);
Toast.makeText(BounceActivity.this, "Game stopped", Toast.LENGTH_SHORT).show();
myRefreshThread = null;
break;
}
super.handleMessage(msg);
}
};
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
this.myBounceView = new BounceView(this, dm.widthPixels, dm.heightPixels);
this.setContentView(myBounceView);
myRefreshThread = new Thread(new RefreshRunner());
myRefreshThread.start();
}
class RefreshRunner implements Runnable {
@Override
public void run() {
while (myRefreshThread != null) {
if(BounceView.game_state == 0) {
Message msg = Message.obtain();
msg.what = BounceActivity.GAME_START;
myGUIUpdateHandler.sendMessage(msg);
} else if (BounceView.game_state == 1) {
Message msg = Message.obtain();
msg.what = BounceActivity.GAME_STOP;
myGUIUpdateHandler.sendMessage(msg);
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
}}
您正在不同的线程上访问和设置myRefreshThread,这可能会有问题 您可以向RefreshRunner添加一个“running”标志和一个将其设置为false的stop方法,而不是检查while循环中myRefreshThread是否为null。 然后在while循环中检查该标志 保留对RefreshRunner的引用(传递给myRefreshThread的引用),并在希望动画停止时调用stop()
class RefreshRunner implements Runnable {
private void mRunning = true;
public void stop () {
mRunning = false;
}
@Override
public void run() {
while (mRunning) {
if(BounceView.game_state == 0) {
Message msg = Message.obtain();
msg.what = BounceActivity.GAME_START;
myGUIUpdateHandler.sendMessage(msg);
} else if (BounceView.game_state == 1) {
Message msg = Message.obtain();
msg.what = BounceActivity.GAME_STOP;
myGUIUpdateHandler.sendMessage(msg);
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
}}