项目中期,寻找一种快速而肮脏的方式摆脱困境。
游戏看起来像这样。要播放,请单击一张卡片,然后单击另一张卡片,如果匹配,则两者都会保持显示状态。全部比赛,比赛结束。
在我的情况下,当我显示一张卡片时,当用户选择第二张卡片时,处理逻辑应将卡片设置为可见,然后再检查是否匹配。如果没有,请将卡片还原为旧图片。
我希望这段代码可以帮助您理解我想要做的事情。
gridLayout.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//HOW DO I FORCE THE INTERFACE TO REDRAW BEFORE CONTINUING THE THREAD?
engine.setCardStateToShow(position);
gridLayout.invalidate();
gridLayout.invalidateViews();
try{
Thread.sleep(1000);
}catch (Exception x){
}
//DETERMINE IF THE CARDS MATCH AND IF NOT -- SET CARD INVIS
String message = engine.itemClicked(position, gridLayout);
Toast.makeText(getApplication(), message, Toast.LENGTH_SHORT).show();
//If engine returns a value of WASWINNER, we can end the activity and end the game.
if (message.equals(GameEngine.WASWINNER)) {
startActivity(endActivity);
}
}
});
}
最终结果是应用程序更改要显示的图像,检查匹配,如果没有匹配更改则不显示。然后,再次使用新值重新绘制界面,因此对于最终用户,如果没有匹配,他们永远不会看到&#34;错误&#34; tile,因为它被还原为&#34; not show。&#34;
提前致谢,如果可以更好地提出问题,请纠正我。
答案 0 :(得分:0)
好的,我设法使用AsyncTask抽象类解决了这个问题。通过使用AsyncTask,我实际上可以“多线程”,将比较逻辑与UI逻辑分开。因此,我可以直接和单独管理UI,如下面的基本说明所示。
通过使用onPreExecute(),我展示了卡片。
使用doInBackground()我可以检查并设置卡片显示状态处理。
通过使用onPostExecute(),我可以根据AsyncTask实现的DoInBackground()方法的结果,直接在UI线程中将卡片返回到最终视图状态。