Как отобразить случайные изображения при просмотре изображения

1

Может кто-нибудь, пожалуйста, помогите мне с кодом для случайного отображения изображения из папки моих рисунков? Я новичок в java, поэтому я понятия не имею, как это сделать. Любая помощь будет оценена. Мои требования: - 1. Случайное изображение (изображение должно меняться при каждом запуске) 2. что все

import java.util.Random;
import java.util.Random;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;

public class MainMenu extends Activity {

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

public void openNewActivity(View view) { 
Intent intent = new Intent(this,MainActivity.class);
startActivity(intent);//button to open main
}
public void browser(View view) { 
    Intent intent = new Intent(this,Browser.class);
    startActivity(intent);//button to open browser
}


final Random rnd = new Random();

{

    setContentView(R.layout.activity_main_menu);

    final ImageView img = (ImageView) findViewById(R.id.imgRandom);
    // I have 3 images named img_0 to img_2, so...
    final String str = "img_" + rnd.nextInt(9);
    img.setImageDrawable
    (
        getResources().getDrawable(getResourceID(str, "drawable",
            getApplicationContext()))
        );
}

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;
    }


}
}
Теги:
imageview

1 ответ

6
Лучший ответ

Поместите некоторые изображения с именем img_0 в img_n в папку res/drawable

Макет (res/layout/rnd_images.xml):

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity"
    >
    <ImageView
        android:id="@+id/imgRandom"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
    />
</RelativeLayout>

код:

package com.example.app;

import java.util.Random;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.ImageView;

public class MainActivity
extends Activity
{
    final Random rnd = new Random();

    @Override
    protected void onCreate(
        final Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.rnd_images);

        final ImageView img = (ImageView) findViewById(R.id.imgRandom);
        // I have 3 images named img_0 to img_2, so...
        final String str = "img_" + rnd.nextInt(2);
        img.setImageDrawable
        (
            getResources().getDrawable(getResourceID(str, "drawable",
                getApplicationContext()))
            );
    }

    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;
        }
    }
}

Обратите внимание, что вам нужно установить rnd.nextInt(2) в rnd.nextInt(Max - 1), так как rnd начинается с 0

[ОБНОВЛЕНИЕ]

Имя макета должно совпадать с именем в setContentView.
Итак, если у вас есть (почему?) Это:

setContentView(R.layout.activity_main);

в вашем MainActivity.java/onCreate, затем переименуйте макет "activity_main.xml"

ИЛИ, лучше, ИСПОЛЬЗУЙТЕ МОЙ КОД КАК ЕСТЬ.

Он работает без изменений.

[ОБНОВЛЕНИЕ]

Проверьте эту строку:

final Random rnd = new Random();

Для этого требуется следующий импорт:

import java.util.Random;

Мой код работает как. Я проверил его, прежде чем давать его вам.
Просто разместите мой макет в res/layout, изображения в res/drawable и MainActivity.java, чтобы заменить стандартный.

Пожалуйста, обратите внимание, что имена изображений ДОЛЖНЫ быть "img_ #", где # - номер.
Это число должно быть от 0 до (max - 1).

Или дайте имена типа "my_city_ #" или что-то еще.
Но тогда вы должны обновить код Java до , чтобы соответствовать этим именам.

  • 0
    и если у меня есть 10 изображений, я должен установить его на 9?
  • 1
    Да, идеально. Первый 0 и последний 9
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню