2015-11-23 2 views
0

Я довольно новичок в разработке Android, и я пытаюсь создать приложение, которое выбирает случайное изображение между 3-мя снимками и показывает один из них на экране телефона всякий раз, когда изображение прослушивается.Случайное создание изображений на Android, нажав на ImageView

Проблема в том, что изображение всегда одно и то же, а вместо его изменения исчезает и появляется с каждым нажатием.

Изображения имен: w0.png, w1.png и w2.png

private static final Random rgenerator = new Random(); 
private ImageView iv; 
private int q; 

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

    q = rgenerator.nextInt(2); 
    iv = (ImageView) findViewById(R.id.imageView1); 
    int resId = getResources().getIdentifier("w"+q, "drawable", getPackageName()); 
    iv.setImageResource(resId); 

    iv.setOnClickListener(this); 
} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 


@Override 
public void onClick(View v) { 
    if(v.getId()==R.id.imageView1) 
    { 
     int resId = getResources().getIdentifier("w"+ rgenerator.nextInt(2), "drawable", getPackageName()); 
     iv.setImageResource(resId); 
    } 
} 

Это activity_main.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="com.example.mandandroid.MainActivity" > 

<ImageView 
    android:id="@+id/imageView1" 
    android:layout_width="100px" 
    android:layout_height="100px" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true"/> 
</RelativeLayout> 
+0

'nextInt (2)' возвращает 0 или 1. Вы, вероятно, хотите 'nextInt (3)' – Blackbelt

ответ

0

Я думаю, ваша проблема исходит из того, что вы используете тот же экземпляр Random() за всю вашу деятельность. Java Random является генератором псевдослучайных чисел, что означает, что вы можете получать одни и те же значения несколько раз. Когда вы создаете экземпляр rgenerator, он будет иметь одно и то же семя, и он будет использовать его для генерации ваших значений random.

Также вы используете .nextInt(int n), который по определению исключает значение n, в вашем случае значение 2, а это означает, что вы остались только со значениями 0 и 1 должны быть возвращены. Из документации, похоже, вы получаете почти равные шансы получить любую ценность в указанном интервале, поэтому в вашем случае у вас действительно есть равные шансы получить 0 или 1, потому что есть только два значения.

Поскольку вы используете Random только для получения одного из трех значений, я предлагаю вам создать вашу рандомизацию с помощью приращения или другого простого метода в пределах ваших границ.

Вы можете узнать больше о Java Random в официальной документации here и небольшом примере о том, как его использовать here.