2010-10-15 2 views
0

Я хочу загрузить растровые изображения в ImageViews на Android, но я не хочу использовать синтаксис R.drawable, потому что у меня много изображений со стандартным соглашением об именах, поэтому гораздо проще получить изображение с помощью некоторая логика. Например, все мои изображения названы:Синтаксис Android Bitmap

img1.png img2.png img3.png

Таким образом, если пользователь выбирает значение, скажем, х, я показываю «IMG» + х +». png "в ImageView. Похоже, что Bitmap.decodeFile - это то, что мне нужно, но мне нужно знать синтаксис того, как попасть в мою папку drawables, так как это то, где находятся изображения. Или, может быть, лучший способ.

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

ответ

1

Один из вариантов - использовать отражение для загрузки изображений из R. Вы можете искать статические переменные по имени строки. Имейте в виду, что отражение может быть медленным. Если вы собираетесь загружать одно и то же изображение несколько раз, вы можете захотеть сохранить кэш имени -> R id.

Редактировать: Вы также можете получить к ним доступ по URI. См. referring to android resources using uris.

+0

Кажется, что это может сработать, но я бы предположил, что ссылка на файл по его пути и имени будет проще. – CYAD

+0

См. Edit ....... –

0

Значение R.drawable является числом само по себе. Вам просто нужно использовать первый идентификатор изображения и добавить фиксированное значение, чтобы найти правильное изображение. Например:

R.drawable.image1 = 1234; R.drawable.image2 = 1235; и т.д.

Так, чтобы получить изображение 2 Я хотел бы, чтобы R.drawable.image1 + 1.

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

0

Похоже, я нашел решение. Реальная проблема заключается в том, что я генерирую имена ресурсов во время выполнения, но я могу получить идентификатор ресурса следующим образом: getResources(). GetIdentifier ("string1" + string2, "id", "com.company.package")

Затем я могу передать это значение setImageResource или любой другой метод, который принимает идентификатор ресурса.

+0

Тогда вы должны принять свой собственный ответ здесь :) –