卡片猜谜游戏,第二张卡片不会吸引中间线程

时间:2016-04-07 12:51:53

标签: android

项目中期,寻找一种快速而肮脏的方式摆脱困境。

游戏看起来像这样。要播放,请单击一张卡片,然后单击另一张卡片,如果匹配,则两者都会保持显示状态。全部比赛,比赛结束。

enter image description here

在我的情况下,当我显示一张卡片时,当用户选择第二张卡片时,处理逻辑应将卡片设置为可见,然后再检查是否匹配。如果没有,请将卡片还原为旧图片。

我希望这段代码可以帮助您理解我想要做的事情。

    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;

提前致谢,如果可以更好地提出问题,请纠正我。

1 个答案:

答案 0 :(得分:0)

好的,我设法使用AsyncTask抽象类解决了这个问题。通过使用AsyncTask,我实际上可以“多线程”,将比较逻辑与UI逻辑分开。因此,我可以直接和单独管理UI,如下面的基本说明所示。

通过使用onPreExecute(),我展示了卡片。

使用doInBackground()我可以检查并设置卡片显示状态处理。

通过使用onPostExecute(),我可以根据AsyncTask实现的DoInBackground()方法的结果,直接在UI线程中将卡片返回到最终视图状态。