2016-12-21 2 views
1

Привет Я работаю над простым приложением для Android. Приложение содержит только изображение. При отображении изображения изображение изображения, которое отображается, должно быть изменено. Мой вопрос в том, как я могу получить список ресурсов или изображения ресурсов по индексу. Например, в drawable у меня есть 100 изображений с именем s1 - s100. И я хочу отобразить один из них, используя случайную функцию:Выбор случайного изображения из ресурсов

private void ImageView_Click(object sender, EventArgs e) 
     { 
      Random r = new Random(); 
      int index = r.Next() % 100; 

      //code where I get picture on "index place" from my drawable folder. 
     } 

Спасибо!

ответ

1

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

Я не уверен, что на Xamarin/C#, как это было бы, но на Java используется так:

Random r = new Random(); 
int index = r.nextInt(100); 
String name = "s" + index; 
int drawableId = getResources().getIdentifier(
        name,    // the name of the resource 
        "drawable",   // type of resource 
        getPackageName())); // your app package name 
imageView.setImageResource(drawableId); 
1

Возьмите один массив целочисленного для хранения все вводимого коэффициента

int resIds = new int[]{R.drawable.s1, R.drawable.s2, .... R.drawable.s100}; 

Затем вычисляет случайный индекс и выбрать вытяжку из этого индекса

Random r = new Random(); 
int index = r.Next(resIds.length -1); 
imageView.setImageResource(resIds[index]); 
+0

Должен ли я добавить инструкцию using, чтобы получить доступ к R? –

+0

Почему вы приняли этот ответ? Кто хочет создать такой целочисленный массив? Ответ @Budius - это то, где вы были. И лучший ответ даже не был опубликован, так как можно просто перечислить содержимое выпадающей папки. – greenapps

1

Создания любого файла arrays.xml в значениях и добавьте в вводимом коэффициенте массив как этот

<integer-array name="images"> 
    <item>@drawable/drawable1</item> 
    <item>@drawable/drawable2</item> 
    <item>@drawable/drawable3</item> 
</integer-array> 

Тогда в классе деятельности добавить этот

TypedArray images = getResources().obtainTypedArray(R.array.images); 

// get resource id by random index i 
images.getResourceId(i, -1) 
0

Это самое элегантное решение, @Budius дал в Java, это C# :

private void ImageView_Click(object sender, EventArgs e) 
     { 
      Random r = new Random(); 
      int index = r.Next() % 36; 
      String name = "s" + index; 
      int drawableId = Resources.GetIdentifier(
           name,    // the name of the resource 
           "drawable",   // type of resource 
           "Us.Us"); // your app package name 
      imageView.SetImageResource(drawableId); 

     } 

"Us.Us" мое имя пакета.

+0

похоже на мой ответ. просто говорю. – Budius

+1

@Budius Приносим извинения. Я скучаю посмотрел. благодаря –