как выбрать из ресурсов случайным образом (R.drawable.xxxx)

Я хочу отобразить случайное изображение от набора изображений, которые я сохранил в res/drawable.

Единственная техника, которую я знаю, состоит в том, чтобы получить доступ к конкретному изображению, если Вы знаете его идентификатор ресурса. Существует ли способ получить доступ к изображениям при помощи имен файлов или чего-то еще (который может быть создан во времени выполнения)?

Я хочу случайным образом выбрать изображение во времени выполнения. Любые предложения/идеи ценятся :)

Спасибо Chinmay

6
задан chinmay dhodapkar 16 August 2010 в 20:32
поделиться

6 ответов

Вы также можете получить доступ к ресурсам по имени, что может быть жизнеспособным подходом к решению вашей проблемы, если вы знаете имена ресурсов или можете получить их в соответствии с некоторой заранее определенной схемой именования.

Вы должны сопоставить имя с идентификатором, используя метод getIdentifier класса Resources .

String name = "resource" + rng.nextInt(count);
int resource = getResources().getIdentifier(name, "drawable", "com.package");

В документации к этому методу сказано:

Примечание: использование этой функции является обескуражен. Это намного эффективнее получать ресурсы по идентификатору чем по имени.

Это правда, но это не должно быть проблемой, если вы делаете это в коде, не зависящем от производительности.

В качестве альтернативы, если вы не против перечислить ресурсы в XML, вы можете создать типизированный массив , из которого затем можно будет произвольно выбирать.

5
ответ дан 8 December 2019 в 04:07
поделиться

Элементы в res/drawable перечисляются в классе R.drawable во время компиляции. Возможно, вы могли бы использовать reflection, чтобы получить список членов этого класса, а затем выбрать из этого списка случайным образом.

2
ответ дан 8 December 2019 в 04:07
поделиться

Я не могу придумать, что можно сделать во время выполнения. Возможно, вы можете создать массив целых чисел адресов (поскольку R.drawable.xxxx по сути является целым адресом) и затем использовать java.util.Random для выбора случайного адреса ресурса из вашего массива.

1
ответ дан 8 December 2019 в 04:07
поделиться

Если бы вы знали, что у вас есть X изображений на выбор, вы могли бы использовать random.nextInt(X) для случайной генерации целого числа от 0 (включительно) до X (исключительно), а затем включить его для выбора ресурса:

Random mRand = new Random();
            int x = mRand.nextInt(8);
            switch (x) {
            case 0:
                mResource = R.id.someresource1
            case 1:
                mResource = R.id.someresource2
            ...
            case X:
                mResource = R.id.someresourceX

            }
0
ответ дан 8 December 2019 в 04:07
поделиться

Я никогда не использовал AssetManager, но сможете ли вы вызвать getAssets в своем классе Resources, а затем вызвать список AssetManager с указанием местоположения ваших ресурсов?

0
ответ дан 8 December 2019 в 04:07
поделиться

Если вы не против создания XML файла, вы должны быть в состоянии использовать LevelListDrawable и вызвать setImageLevel() с вашим случайным числом.

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

0
ответ дан 8 December 2019 в 04:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: