Как установить источник ImageViews программно в Android? [дубликат]
этот вопрос уже есть ответ здесь:
- Изменить изображение ImageView программно в Android 7 ответов
- Как я могу изменить изображение ImageView? [дубликат] 4 ответы
Я делаю составной пользовательский интерфейс элемент, который принимает объект(игрок), и я хочу выбрать соответствующее изображение для команды, за которую играет этот игрок (объект игрока имеет строковое значение для его номера изображения. У меня есть изображения в папке ресурсов моего проекта.
Как указать правильный источник для каждого игрока. Это случай написания огромного количества if и elses (проверка строкового значения) и использование res. getDrawable (R. drawable.no1) и т. д. Или есть более элегантное решение, где я могу использовать строку каким-то образом указать путь к источнику?
3 ответа:
Я бы поставил связь между строками и изображениями на карте:
Map<String, Integer> map = new HashMap<String, Integer>(); map.put("blah", R.drawable.blah); // etc...
тогда вы можете использовать
setImageResource(int)
способ:ImageView image; image.setImageResource(map.get("blah"));
или, если строки имеют то же имя, что и изображение (как и в предыдущем случае), вы можете загрузить ресурс с помощью этого метода: Android и получение представления с идентификатором в виде строки
использовать
setImageResource(int)
если я правильно понимаю, вы хотите отобразить ресурс изображения из строки. Я делаю это в приложении, где пользователь может выбрать изображение из пользовательского ListPreference, и оно отображается в макете MainActivity. Идентификатор ресурса drawable хранится в SharedPreferences в виде строки, которая соответствует примеру идентификатора ресурса drawable (String): "@drawable/logo_image". Я тяну значение ListPreference с:
SharedPreferences shared = getSharedPreferences("com.joshuariddle.recoveryworkscounter.settings", MODE_PRIVATE); String logo_id = (shared.getString("pref_logo",""));
это возвращает drawable ресурс в виде строки т. е. @drawable / logo_image. Затем, чтобы вставить этот drawable / image в мой макет, я использую:
ImageView iv_logo = (ImageView) findViewById(R.id.imgLogo); iv_logo.setImageResource(getResources().getIdentifier(logo_id, "drawable", "com.yourpackage"));
это изменит ресурс ImageView на новый drawable с setImageResource (), используя int, возвращенный методом ниже, который возвращает идентификатор (int) из строки, представляющей drawable ресурс в com.yourpackage:
getResources().getIdentifier(logo_id, "drawable", "com.yourpackage")
вы также можете использовать этот же метод для изменения других ресурсов, которые используют мешочки, таких как фоны макет и т. д. Вы просто должны использовать этот метод чтобы получить идентификатор в виде int:
getResources().getIdentifier("Resource Id String", "drawable", "com.yourpackage")