随机select两个ImageView之一并更新ResourceImage

Randomly select one of two ImageViews and update ResourceImage

我在布局中创建了两个 ImageView,我们称它们为 imageviewTopimageviewBottom
我将两张图片保存到可绘制对象中(green_image.png 和 red_image.png)。
我还添加了一个按钮,我想做的是,当单击该按钮时,其中一个 ImageViews 将随机 selected 并且从 green_image 变为 red_image.

我已经尝试创建一个 switch/case 语句并生成一个随机数,例如 1 或 2。
基于这个数字,case 语句将更新顶部或底部图像。
这适用于 2 个 ImageView,但如果我有 100 个,我需要在代码中创建 100 个案例。
我正在寻找一个更动态的选项。

我知道如何为 ImageView 更新图像,我正在努力解决如何 select 随机一个 ImageView 的部分,如果可能的话。

代码如下:

public class MainActivity extends Activity {

    ImageView imagevieTop, imageviewBottom;
    Button randomButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imagevieTop = (ImageView) findViewById(R.id.imageViewTop);
        imageviewBottom = (ImageView) findViewById(R.id.imageViewBottom);
        randomButton = (Button) findViewById(R.id.buttonRandom);

        randomButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // randomly select one of the two imageviews
                // for example: randomly selected imageviewTop
                // set imageresource red_image to imageviewTop

                //at next start up it would select either top or bottom, 50%-50% and then assign the image to it
            }
        });
    }
}

你可以只使用一个 ImageView,并随机化你绘制的图片。

或者,您可以调整它以使用一组 ImageView。你的选择。

不过,您想要的行是 int index = random.nextInt(imgs.length); 从列表中获取随机索引。

public class MainActivity extends Activity {

    int[] imgs = new int[] { R.drawable.green_image, R.drawable.red_image };
    Button randomButton;

    private final Random random = new Random();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final ImageView imgView = (ImageView) findViewById(R.id.imageView);
        randomButton = (Button) findViewById(R.id.buttonRandom);

        randomButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int index = random.nextInt(imgs.length);

                // randomly select one of the two drawables
                int resId = imgs[index];

                // set imageresource imgView
                Drawable d = getResources().getDrawable(resId);
                imgView.setImageDrawable(d);

            }
        });
    }
}

要处理“100 个 ImageViews”问题,我建议不要复制 100 行代码,而是循环遍历合理的 ID 值。

List<ImageView> imgViews = new ArrayList<ImageView>();
for (int i = 0; i < 100; i++) {
    int resId = getResources().getIdentifier("imgView" + i, "id", getPackageName());
    ImageView nextImg = (ImageView) findViewById(resId);
    imgViews.add(nextImg);
}

如果您想对 "n" 个 ImageView 元素进行动态 selection,那么您需要将它们存储在数据结构中(例如数组、列表等)。 ).例如,此代码将 select 列表中的随机 ImageView:

public ImageView getRandomImageView(final List<ImageView> imageViewList) {
        final Random random = new Random();
        //The "nextInt" method works in the half-open range [0, n), so it'll never be equal to the list size.
        final int randomElement = random.nextInt(imageViewList.size());
        return imageViewList.get(randomElement);
    }

在你的情况下,在固定变量中声明了两个 ImageView("imagevieTop" 和 "imageviewBottom"),那么你需要将它们传递给列表或类似的东西以便 select其中之一是动态的。