2

Android用のメモリゲームに取り組んでいますが、問題が発生しています。ユーザーが2番目の画像をタップしたとき-画像が同じでない場合は、2番目の画像を1、2秒間表示します。

私が試したのは、1〜2秒間寝ることです。2番目の画像がアクティブ化された後のUIスレッド-しかし、これは機能していないようです-2番目の画像は表示されていないようです!(最初の画像のみが表示されます)

これが私のコードです:

public void whenTapedImage(View v, int position)
{
    i++;
    ImageView imgV=(ImageView)v;
    if(i%2!=0)
    {
        firstClick=position;
        imgV.setImageResource(im.images.get(firstClick));           
    }
    else
    {   
        secondClick=position;
        imgV.setImageResource(im.images.get(secondClick));                      
        try {
            Thread.currentThread().sleep(1000);
            if(!(im.images.get(firstClick).equals(im.images.get(secondClick))))
            {
                Toast.makeText(easyGame.this, "Try Again!", Toast.LENGTH_SHORT).show();
                im.notifyDataSetChanged();
                gridview.setAdapter(im);
                gridview.invalidate();
                aux=player1Turn;
                player1Turn=player2Turn;
                player2Turn=aux;
            }
            else{
                done=done+2;
                ImageAdapter.keepVisibleViews.add(firstClick);
                ImageAdapter.keepVisibleViews.add(secondClick);
                if(player1Turn==true)
                {
                    player1Score++;
                    String score=Integer.toString(player1Score);
                    score1.setText(score);
                }
                if(player2Turn==true)
                {
                    player2Score++;
                    String score=Integer.toString(player2Score);
                    score2.setText(score);
                }
            }   
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   
    }           
}

私は何が間違っているのですか?

4

2 に答える 2

7

UIスレッドをスリープしないでください。スリープすると、AndroidがアクティビティのUIに他のイベントを配信できなくなります。

代わりに、タイマーを使用するなどの操作を行い、タイマーのメソッドにUIスレッド機能での実行を使用させて、必要な延期された変更を行います。

堅牢性を確保するために、ステートマシンを(正式に、または実際に)実装して、何が起こっているかを追跡する必要がある場合があります。別のボタンが押された場合に、現在の遅延を中止するか強制するかを決定する必要があります。ステートマシンにそれを適切に処理させます。

于 2012-06-12T18:34:45.053 に答える
5

これはAndroid アプリの Waiting に似ています

そこに投稿された解決策に従ってみて、Timer Classを使用してください

于 2012-06-12T18:39:54.300 に答える