0

私は 5 を持っているという要件がありますImageButtons。これらの5つに60〜80枚の画像をImageButtonsランダムにロードしたい。どうやってやるの?

public void setRandomImages(int n){
    Random rand = new Random();
    int x = rand.nextInt(5)+1;

    switch (x) {
    case 1:
        bt1.setVisibility(View.VISIBLE);
        bt1.setBackgroundColor(Color.RED);
        bt1.setOnClickListener(new listener());

        bt2.setVisibility(View.VISIBLE);
        bt2.setBackgroundColor(Color.BLACK);
        bt2.setOnClickListener(new listener());

        bt3.setVisibility(View.VISIBLE);
        bt3.setBackgroundColor(Color.BLUE);
        bt3.setOnClickListener(new listener());

        bt4.setVisibility(View.VISIBLE);
        bt4.setBackgroundColor(Color.GREEN);
        bt4.setOnClickListener(new listener());

        bt5.setVisibility(View.VISIBLE);
        bt5.setBackgroundColor(Color.YELLOW);
        bt5.setOnClickListener(new listener());
        break;

    default:
        break;
    }

またonclick、対応するロードされた画像のうち、いくつかのサウンドを再生したいので、ハンドラーを使用できます。

私が知りたいのは、選択した画像に対応するリスナーをランダムに参照する方法です。

つまり、

画像を選択すると、サウンドが再生され、その場所に別の画像が読み込まれ、上記のすべてのプロセスが繰り返されます。

私はそれがすべて面倒であることを知っていますが、私の要件を理解した人は誰でも私を提案/助けてください.

編集:

RandomImagePicker.java

public class RandImagePicker extends Activity {

Handler handler = new Handler();
int resId1,resId2,resId3,resId4;
List<ImageSound> ImageSoundObjs = new ArrayList<ImageSound>();
ImageView iv5;
ImageView img1,img2,img3,img4;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_rand_image_picker);

    iv5 = (ImageView)findViewById(R.id.image5);

    createImageAndSoundObjects();
    showObjects();
}

private void createImageAndSoundObjects() {
    ImageSound obj;

    TypedArray imgs = getResources().obtainTypedArray(R.array.random_imgs);
    for(int i = 0 ; i <= 12 ; i++) {

        obj = new ImageSound(imgs.getResourceId(i, 1));
        ImageSoundObjs.add(obj);
    }
}

private void showObjects() {
    Random rand = new Random();
    img1 = (ImageView) findViewById(R.id.image1);
    img2 = (ImageView) findViewById(R.id.image2);
    img3 = (ImageView) findViewById(R.id.image3);
    img4 = (ImageView) findViewById(R.id.image4);

    for(int i = 0 ; i <= 12 ; i++) {
        int  n1 = rand.nextInt(12)+1;
        int  n2 = rand.nextInt(12)+1;
        int  n3 = rand.nextInt(12)+1;
        int  n4 = rand.nextInt(12)+1;

        resId1 = ImageSoundObjs.get(n1).getResourceId();
        img1.setImageResource(resId1);
        img1.setOnClickListener(new Listener());

        resId2 = ImageSoundObjs.get(n2).getResourceId();
        img2.setImageResource(resId2);
        img2.setOnClickListener(new Listener());


        resId3 = ImageSoundObjs.get(n3).getResourceId();
        img3.setImageResource(resId3);
        img3.setOnClickListener(new Listener());

        resId4 = ImageSoundObjs.get(n4).getResourceId();
        img4.setImageResource(resId4);
        img4.setOnClickListener(new Listener());
    }

}

class Listener implements OnClickListener{

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub


        handler.postDelayed(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub

                img1.setVisibility(View.VISIBLE);
                img2.setVisibility(View.VISIBLE);
                img3.setVisibility(View.VISIBLE);
                img4.setVisibility(View.VISIBLE);
                showObjects();
                iv5.setVisibility(View.GONE);
            }
        }, 1000);

        img1.setVisibility(View.GONE);
        img2.setVisibility(View.GONE);
        img3.setVisibility(View.GONE);
        img4.setVisibility(View.GONE);

        if (v.getId() == R.id.image1) {
            iv5.setVisibility(View.VISIBLE);
            iv5.setImageResource(resId1);
        } else if (v.getId() == R.id.image2) {
            iv5.setVisibility(View.VISIBLE);
            iv5.setImageResource(resId2);
        } else if (v.getId() == R.id.image3) {
            iv5.setVisibility(View.VISIBLE);
            iv5.setImageResource(resId3);
        } else if (v.getId() == R.id.image4) {
            iv5.setVisibility(View.VISIBLE);
            iv5.setImageResource(resId4);
        }

    }

}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.rand_image_picker, menu);
    return true;
}

}

ImageSound.java

public class ImageSound {
int mResourceId;
ImageSound(int i) {
    mResourceId = i;
}

public int getResourceId() {
    return mResourceId;
}

}

4

1 に答える 1

1

画像をランダムに選択する方法を示す非常に基本的な例を作成しました。これは、必要に応じてオブジェクトにプロパティを追加することで拡張できます。たとえば、サウンドなどです。

わずか 10 分のプロトタイプです。こちらをご覧ください。

https://github.com/sathvik87/RandomImage

于 2013-03-22T12:44:54.103 に答える