0

5つのイメージビューからランダムにイメージビューを表示したいのですが、ユーザーが表示されたイメージビューをクリックすると、別のイメージビューが表示され、カウントが5に達するまでプロセスが繰り返されますが、コードは一度に複数のイメージビューを表示します。

私のコード:

public class Gamepage extends Activity 
{
    ImageView img,img1,img2,img3,img4;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        setContentView(R.layout.trygame);

        img=(ImageView) findViewById(R.id.imageView2);
        img1=(ImageView) findViewById(R.id.imageView3);
        img2=(ImageView) findViewById(R.id.imageView4);
        img3=(ImageView) findViewById(R.id.imageView5);
        img4=(ImageView) findViewById(R.id.imageView6);
        int choose;
        int count=0;
            choose=(int) (Math.random()*5);
            while(count!=5)
            {
            switch(choose)
        {
        case 1:

        img.setVisibility(View.VISIBLE);
                img.setOnTouchListener(new View.OnTouchListener() {

        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub

            Toast toast= Toast.makeText(Gamepage.this, "caught!! ",     200);
            toast.setGravity(Gravity.RIGHT, 10,10);
            toast.show();

            img.setVisibility(View.INVISIBLE);
            return true;

        }
    });
            //choose=(int) (Math.random()*5);
            //count++;
    break;
    case 2:
        img1.setVisibility(View.VISIBLE);


        img1.setOnTouchListener(new View.OnTouchListener() {

            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub

                Toast toast= Toast.makeText(Gamepage.this,     "caught!! ", 200);
                toast.setGravity(Gravity.RIGHT, 10,10);
                toast.show();
                img1.setVisibility(View.INVISIBLE);
                return true;
            }
        });
        //choose=(int) (Math.random()*5);
        //count++;
        break;
    case 3:

        img2.setVisibility(View.VISIBLE);

        img2.setOnTouchListener(new View.OnTouchListener() {

            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub

                Toast toast= Toast.makeText(Gamepage.this, "caught!! ", 200);
                toast.setGravity(Gravity.RIGHT, 10,10);
                toast.show();
                img2.setVisibility(View.INVISIBLE);
                return true;
            }
        });
        //choose=(int) (Math.random()*5);
        //count++;
        break;
    case 4:

        img3.setVisibility(View.VISIBLE);

        img3.setOnTouchListener(new View.OnTouchListener() {

            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub

                Toast toast= Toast.makeText(Gamepage.this, "caught!! ", 200);
                toast.setGravity(Gravity.RIGHT, 10,10);
                toast.show();
                img3.setVisibility(View.INVISIBLE);
                return true;
            }
        });
        //choose=(int) (Math.random()*5);
        //count++;
        break;
    case 5:

        img4.setVisibility(View.VISIBLE);

        img4.setOnTouchListener(new View.OnTouchListener() {

            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub

                Toast toast= Toast.makeText(Gamepage.this, "caught!! ", 200);
                toast.setGravity(Gravity.RIGHT, 10,10);
                toast.show();
                img4.setVisibility(View.INVISIBLE);
                return true;

            }
        });
        //choose=(int) (Math.random()*5);
    //  count++;
        break;
        default:
            img4.setVisibility(View.VISIBLE);

            img4.setOnTouchListener(new View.OnTouchListener() {

                public boolean onTouch(View v, MotionEvent event) {
                    // TODO Auto-generated method stub

                    Toast toast= Toast.makeText(Gamepage.this, "caught!! ", 200);
                    toast.setGravity(Gravity.RIGHT, 10,10);
                    toast.show();
                    img4.setVisibility(View.INVISIBLE);
                    return true;

                }
            });
            //choose=(int) (Math.random()*5);
            //count++;
            break;

    }
        choose=(int) (Math.random()*5);
        count++;
        }


}


}
4

4 に答える 4

0
  • ループする前に、すべてのImageViewの可視性をINVISIBLEに設定しましたか?
  • ループは非常に高速に実行できるため、この方法では結果が表示されない場合があります。ループの速度を落とすために、ループの最後にThread.sleep(3000)を配置してみてください。
于 2012-05-19T09:03:10.700 に答える
0

私には解決策があると思います。ここで動作します...これを試してください:

public class GamePage extends Activity {
/** Called when the activity is first created. */

private int count=0;
private ImageView img;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.trygame);

    img=(ImageView) findViewById(R.id.imageView1);
    img.setImageResource(R.drawable.your_bitmap_drawable1);
    img.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if (count<5){
                int choose=(int) (Math.random()*5);
                switch(choose){
                    case 1:
                        img.setImageResource(R.drawable.your_bitmap_drawable1);
                    break;
                    case 2:
                        img.setImageResource(R.drawable.your_bitmap_drawable2);
                    break;
                    case 3:
                        img.setImageResource(R.drawable.your_bitmap_drawable3);
                    break;
                    case 4:
                        img.setImageResource(R.drawable.your_bitmap_drawable4);
                    break;
                    case 5:
                        img.setImageResource(R.drawable.your_bitmap_drawable5);
                    break;
                    default:
                        img.setImageResource(R.drawable.your_bitmap_drawable5);
                    break;
                }
                Toast toast= Toast.makeText(TextViewEffectsActivity.this, "caught!! ",     200);
                toast.setGravity(Gravity.RIGHT, 10,10);
                toast.show();
            }
            count++;
        }
    });
}
}

trygame.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

</LinearLayout>

5つのImageViewを持っている必要はありません...それがあなたのために働くかどうか教えてください...

于 2012-05-19T09:11:37.177 に答える
0

このように可視性をtrueとfalseに設定するのは、本当に悪い設計です。代わりに、1つのImageViewを作成し、「setImageResource()」を使用して画像リソースを変更できます。

私が理解したように、画像をクリックする機能が別のランダムな画像を表示することだけである場合は、次のようにすることができます。

1- XMLレイアウトで、1つの「ImageView」を作成します。

2-アクティビティJavaコードで、画像リソースを使用して配列(できれば配列リスト)を作成します。

ArrayList<int> myImages = new ArrayList<int>();
myImages.add(R.drawable.firstimage);
myImages.add(R.drawable.secondImage);

3-これらすべてのリスナーと長いswitchケースを記述する代わりに、次の単純なコードを使用します。

int rnd = Math.random()*5;
int counter = 0;
public void onClick(View v){
   if(counter<5){
      img.setImageResource(myImages.get(rnd));
      counter++;
   }
   else{
      //do whatever you want
   }
}
于 2012-05-19T13:11:11.337 に答える
0

私はここにsulotionを持っています:

-画像を配列リストに入れます

-リストをランダム化する

-リストの最初の画像を取得して表示します

-リスナーまたはタイムアウトを設定して、次の画像に変更します。

于 2012-05-19T13:22:20.260 に答える