简体   繁体   English

使用随机模式时,每个ImageView如何显示不同的图片? Android Studio

[英]How can each ImageView show a different picture when using random? Android Studio

I have 4 images set on random, but when I test it out the result shows the same pictures. 我随机设置了4张图像,但是当我进行测试时,结果显示的图像相同。 I want each image view to show an image different from the others. 我希望每个图像视图都显示与其他图像不同的图像。

This is my code: 这是我的代码:

 final ImageButton imageButton=(ImageButton) findViewById(R.id.imageView);
        imageButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                imageButton.setVisibility(View.INVISIBLE);
                pic1 = (ImageView) findViewById(R.id.imageView2);
                pic2 = (ImageView) findViewById(R.id.imageView3);
                pic3 = (ImageView) findViewById(R.id.imageView4);
                pic4 = (ImageView) findViewById(R.id.imageView5);

                Random rand = new Random();
                int rndInt = rand.nextInt(4) + 1;
                String imgName = "img" + rndInt;
                int id = getResources().getIdentifier(imgName, "drawable", getPackageName());
                pic1.setImageResource(id);
                pic2.setImageResource(id);
                pic3.setImageResource(id);
                pic4.setImageResource(id);

            }
        });

Looking to your code you replace ALL the 4 pic with the same image (for example "img1" or "img2" or "img3" or "img4") 查看您的代码,将所有4张图片替换为同一张图片(例如“ img1”或“ img2”或“ img3”或“ img4”)

if you want to replace the 4 pic with different image simply call: 如果要用其他图片替换4图片,只需调用:

int rndInt = rand.nextInt(4) + 1;
String imgName = "img" + rndInt;
int id = getResources().getIdentifier(imgName, "drawable", getPackageName());

every time before assign the resource id to the ImageView. 每次将资源ID分配给ImageView之前。

Create a function for example: 创建一个函数,例如:

private int getRandomImage() {
    int rndInt = rand.nextInt(4) + 1;
    String imgName = "img" + rndInt;
    return getResources().getIdentifier(imgName, "drawable", getPackageName());
}

and call for each ImageView 并要求每个ImageView

pic1.setImageResource(getRandomImage());
pic2.setImageResource(getRandomImage());
pic3.setImageResource(getRandomImage());
pic4.setImageResource(getRandomImage());

EDIT: 编辑:

If you want to have 4 DIFFERENT images you can change the getRandomImage() with: 如果要具有4个不同的图像,可以使用以下方法更改getRandomImage():

List<Integer> listImageUsed = new ArrayList<Integer>();

private int getRandomImage() {
    int rndInt;
    do {
        rndInt = rand.nextInt(4) + 1;
    } while (!listImageUsed.contains(rndInt));

    listImageUsed.add(rndInt);

    String imgName = "img" + rndInt;
    return getResources().getIdentifier(imgName, "drawable", getPackageName());
}

here is my answere, the other attemps are displaying just 4 different images. 这是我的回答,其他尝试仅显示4个不同的图像。 My solution provides, that the images are random and not identical: 我的解决方案提供的图像是随机的并且不相同:

            final ImageButton imageButton=(ImageButton) findViewById(R.id.imageView);
                    imageButton.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            imageButton.setVisibility(View.INVISIBLE);
                            pic1 = (ImageView) findViewById(R.id.imageView2);
                            pic2 = (ImageView) findViewById(R.id.imageView3);
                            pic3 = (ImageView) findViewById(R.id.imageView4);
                            pic4 = (ImageView) findViewById(R.id.imageView5);

                            ArrayList<Integer> imageIds= new ArrayList<>(Arrays.asList(1, 2, 3, 4))
                            Collections.shuffle(imageIds);

                            pic1.setImageResource(getResources().getIdentifier("img" + imageIds[0], "drawable", getPackageName()));
                            pic2.setImageResource(getResources().getIdentifier("img" + imageIds[1], "drawable", getPackageName()));
                            pic3.setImageResource(getResources().getIdentifier("img" + imageIds[2], "drawable", getPackageName()));
                            pic4.setImageResource(getResources().getIdentifier("img" + imageIds[3], "drawable", getPackageName()));

                        }
                    });

Well also you don't have to change much of your code to make it work ;) Sorry that i packed everything in one line. 好吧,您也不必为了使它正常工作而需要更改很多代码;)很抱歉,我将所有内容打包在一行中。 But Iam really tired for in germany it is almost midnight. 但是Iam真的很累,因为在德国快到午夜了。

It is the same image because "id" only get set once, to get difference Id's you would have to generate more random numbers. 这是同一张图片,因为“ id”仅设置一次,要获得差值ID,您将必须生成更多随机数。 You need to call rand.nextInt(4) four times. 您需要调用rand.nextInt(4)四次。 Once after each ".setImageResource(id)" 每个“ .setImageResource(id)”之后

Just to give you an idea. 只是给你一个想法。

Random rand = new Random();
int rndInt = rand.nextInt(4) + 1;
String imgName = "img" + rndInt;
int id = getResources().getIdentifier(imgName, "drawable", getPackageName());
pic1.setImageResource(id);
//Here you re-generate a random number
rndInt = rand.nextInt(4) + 1;
imgName = "img" + rndInt;
id = getResources().getIdentifier(imgName, "drawable", getPackageName());
pic2.setImageResource(id);
     final ImageButton imageButton=(ImageButton) findViewById(R.id.imageView);
            imageButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    imageButton.setVisibility(View.INVISIBLE);
                    pic1 = (ImageView) findViewById(R.id.imageView2);
                    pic2 = (ImageView) findViewById(R.id.imageView3);
                    pic3 = (ImageView) findViewById(R.id.imageView4);
                    pic4 = (ImageView) findViewById(R.id.imageView5);


                  setRandomImage(pic1);
                  setRandomImage(pic2);
                  setRandomImage(pic3);
                  setRandomImage(pic4);
                }
            });
private void setRandomImage(ImageView imgView)
{
   Random rand = new Random();
   int rndInt = rand.nextInt(4) + 1;
   String imgName = "img" + rndInt;
   int id = getResources().getIdentifier(imgName, "drawable", getPackageName());
   imgView.setImageResource(id);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何在Android Studio的不同角落设置四张图片? - How can i set four picture on different corner on Android Studio? 如何设置处理程序以在 android 工作室中显示 imageview - how to set handler to show imageview in android studio 有没有办法删除 imageview 并创建它以显示 android 中的图片? - Is there a way to delete imageview and create it to show the picture in android? 拍照时Android Studio应用程序ImageView不显示图像 - Android Studio application ImageView doesnt show image when take photo 我可以在 Android Studio 中显示任何 Imageview 的视图吗? - Can I Show View on any Imageview in Android Studio [java] Android Studio:如何在每章中管理不同的练习? - Android Studio:How I can manage different exercises in each chapter? 如何为使用Android中的GridView显示的每个imageView添加不同的Toast消息 - How to add different toast messages for each imageView which displayed using GridView in android 如何在 android 工作室中的 imageview 上添加半透明覆盖并正确显示 - how to add semi transparent overlay on imageview in android studio and show it properlay 如何在Android Studio中的imageView上添加具有不同轴的两个旋转? - how to add two rotation with different pivots on a imageView in android studio? 如何为不同的屏幕尺寸 android studio 自动调整 imageview 的大小? - How to auto-resize imageview for different screen sizes android studio?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM