Question

I have 15 Images in my drawable folder and want 6 of these random images from this folder to be inserted into given locations when I open this page.
Any help will be greatly appreciated. Below is my xml

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginTop="30dp"
    android:layout_marginLeft="65dp"
    android:src="@drawable/circle" />

<ImageView
    android:id="@+id/imageView2"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:layout_alignParentRight="true"
    android:layout_alignTop="@+id/imageView1"
    android:layout_marginRight="65dp"
    android:src="@drawable/eclipse" />

<ImageView
    android:id="@+id/imageView3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/imageView1"
    android:layout_below="@+id/imageView1"
    android:layout_marginTop="52dp"
    android:src="@drawable/invertedtriangle" />

    <ImageView
    android:id="@+id/imageView4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignRight="@+id/imageView2"
    android:layout_below="@+id/imageView1"
    android:layout_marginTop="52dp"
    android:src="@drawable/square" />

    <ImageView
    android:id="@+id/imageView5"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/imageView1"
    android:layout_below="@+id/imageView3"
    android:layout_marginTop="52dp"
    android:src="@drawable/star" />

    <ImageView
    android:id="@+id/imageView6"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/imageView2"
    android:layout_below="@+id/imageView3"
    android:layout_marginTop="52dp"
    android:src="@drawable/polygon" />

 </RelativeLayout> 

Thanks.

Was it helpful?

Solution

Here you are:

First of, you need to import the namespace that contains the random object:

import java.util.Random;

Then you have to take an object out of it

final Random rnd = new Random();

Now, all the action happens in your onCreate method, after you set your contentView:

// Reference the images
ImageView img1 = (ImageView) findViewById(R.id.imageView1);
ImageView img2 = (ImageView) findViewById(R.id.imageView2);
ImageView img3 = (ImageView) findViewById(R.id.imageView3);
ImageView img4 = (ImageView) findViewById(R.id.imageView4);
ImageView img5 = (ImageView) findViewById(R.id.imageView5);
ImageView img6 = (ImageView) findViewById(R.id.imageView6);

// Your images are named img_0.png to img_14.png

// For image 1
final String str = "img_" + rnd.nextInt(14);
img1.setImageDrawable
(
    getResources().getDrawable(getResourceID(str, "drawable",
        getApplicationContext()))
);

// For image 2
str = "img_" + rnd.nextInt(14);
img2.setImageDrawable
(
    getResources().getDrawable(getResourceID(str, "drawable",
        getApplicationContext()))
);

// ...

Now, where is the trick?
In this method:

protected final static int getResourceID
(final String resName, final String resType, final Context ctx)
{
    final int ResourceID =
        ctx.getResources().getIdentifier(resName, resType,
            ctx.getApplicationInfo().packageName);
    if (ResourceID == 0)
    {
        throw new IllegalArgumentException
        (
            "No resource string found with name " + resName
            );
    }
    else
    {
        return ResourceID;
    }
}

I left out the lines of code for image 3 to 6, but they are the very same as for image 2.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top