Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 猜牌游戏,第二张牌赢了';不要画中间线_Android - Fatal编程技术网

Android 猜牌游戏,第二张牌赢了';不要画中间线

Android 猜牌游戏,第二张牌赢了';不要画中间线,android,Android,在这里进行中期项目,并寻找一种快速而肮脏的方法来摆脱棘手的局面 游戏看起来是这样的。要玩游戏,请单击一张牌,然后单击另一张牌,如果它们匹配,它们都将保持显示状态。全力以赴,比赛就结束了 在我的例子中,当显示一张卡时,当用户选择第二张卡时,处理逻辑应将该卡设置为可见,然后检查是否存在匹配。如果没有,请将卡返回到旧图像 我希望这段代码能帮助您理解我的意图 gridLayout.setOnItemClickListener(new AdapterView.OnItemClickListene

在这里进行中期项目,并寻找一种快速而肮脏的方法来摆脱棘手的局面

游戏看起来是这样的。要玩游戏,请单击一张牌,然后单击另一张牌,如果它们匹配,它们都将保持显示状态。全力以赴,比赛就结束了

在我的例子中,当显示一张卡时,当用户选择第二张卡时,处理逻辑应将该卡设置为可见,然后检查是否存在匹配。如果没有,请将卡返回到旧图像

我希望这段代码能帮助您理解我的意图

    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);
            }
        }
    });
}
gridLayout.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
//在继续线程之前,如何强制重新绘制接口?
发动机。设置卡状态显示(位置);
gridLayout.invalidate();
gridLayout.invalidateViews();
试一试{
睡眠(1000);
}捕获(异常x){
}
//确定卡是否匹配,如果不匹配--设置卡Invi
String message=engine.itemClicked(位置、网格布局);
Toast.makeText(getApplication(),message,Toast.LENGTH_SHORT).show();
//如果引擎返回的值为WASWINNER,则可以结束活动并结束游戏。
if(message.equals(GameEngine.WASWINNER)){
起始触觉(终末活动);
}
}
});
}
最终的结果是,应用程序将图像更改为显示,检查匹配,如果没有匹配,则更改为不显示。然后,用新的值重新绘制界面,因此对于最终用户,如果没有匹配,他们永远不会看到“错误”的磁贴,因为它会恢复为“不显示”


提前感谢,如果这个问题可以问得更好,请纠正我。

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

通过使用onPreExecute()我展示了这些卡片

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


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

请发布代码的“请勿发布”屏幕截图。请将所有文本作为文本发布。对不起,我在这里还是比较新的。我会努力找到并阅读规则。