Может кто-нибудь, пожалуйста, помогите мне с кодом для случайного отображения изображения из папки моих рисунков? Я новичок в 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;
}
}
}
Поместите некоторые изображения с именем 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 до , чтобы соответствовать этим именам.