Изменение источника ImageView

257

У меня есть ImageViewс исходным изображением, установленным в XML, используя следующий синтаксис:

   <ImageView 
      android:id="@+id/articleImg"
      style="@style/articleImgSmall_2"
      android:src="@drawable/default_m" />

Теперь мне нужно изменить это изображение программно. Что мне нужно сделать, это удалить старое изображение и добавить новое, хотя. Что я сделал, это:

myImgView.setBackgroundResource(R.drawable.monkey);

Это работает, но я заметил, что Android складывает новое изображение поверх старого (не спрашивайте меня, как я узнал, что это не имеет отношения к обсуждению :). Я определенно должен избавиться от старого, прежде чем устанавливать новый образ.

Как я могу этого достичь?

nourdine
источник

Ответы:

636

Изменение источника ImageView:

Используя setBackgroundResource()метод:

  myImgView.setBackgroundResource(R.drawable.monkey);

Вы помещаете эту обезьяну на задний план.

Я предлагаю использовать setImageResource()метод:

  myImgView.setImageResource(R.drawable.monkey);

или с помощью setImageDrawable()метода:

myImgView.setImageDrawable(getResources().getDrawable(R.drawable.monkey));

*** С новым Android API 22 getResources().getDrawable()теперь устарела. Это пример того, как использовать сейчас:

myImgView.setImageDrawable(getResources().getDrawable(R.drawable.monkey, getApplicationContext().getTheme()));

и как проверить для старых версий API:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
     myImgView.setImageDrawable(getResources().getDrawable(R.drawable.monkey, getApplicationContext().getTheme()));
   } else {
     myImgView.setImageDrawable(getResources().getDrawable(R.drawable.monkey));
}
Jorgesys
источник
о, круто ... к сожалению, я только что узнал, что мне нужно также заменить набор изображений на myImgView.setImageDrawable (img); код, который вы предложили myImgView.setImageResource (R.drawable.monkey); не умеет это делать. как я могу избавиться от рисования перед рендерингом обезьяны? :) большое спасибо
nourdine
1
getDrawable (int) теперь устарела, а getDrawable (int, theme) добавлен в API-21. Что теперь делать? Можете ли вы обновить свой ответ?
Mubeen
Для вызова требуется уровень API 16 (текущий минимум 13): android.widget.ImageView#setBackground
Иман Мараши
ContextCompatчтобы получить рисовать безgetTheme
Outofdate
32
myImgView.setImageResource(R.drawable.monkey);

используется для установки изображения в текущем представлении изображения, но если вы хотите удалить это изображение, вы можете использовать этот код, например:

((ImageView) v.findViewById(R.id.ImageView1)).setImageResource(0);

теперь это удалит изображение из вашего изображения, потому что оно установило значение ресурсов на ноль.

ПИР ФАХИМ ШАХ
источник
18

получить идентификатор ImageView как

ImageView imgFp = (ImageView) findViewById(R.id.imgFp);

затем используйте

imgFp.setImageResource(R.drawable.fpscan);

установить исходное изображение программно вместо XML.

Неха Шукла
источник
8

Или попробуйте это. Для меня это работает нормально:

imageView.setImageDrawable(ContextCompat.getDrawable(this, image));
radu_paun
источник
5

Дополнительный визуальный ответ

ImageView: setImageResource()(стандартный метод, соотношение сторон сохраняется)

введите описание изображения здесь

View: setBackgroundResource()(изображение растянуто)

введите описание изображения здесь

Обе

введите описание изображения здесь

Мой более полный ответ здесь .

Suragch
источник
3

Если вы хотите установить в imageview изображение, находящееся внутри папок mipmap, вы можете сделать это следующим образом:

myImageView.setImageDrawable(getResources().getDrawable(R.mipmap.my_picture)

CommonSenseCode
источник
2

Просто напишите способ изменения изображения

public void setImage(final Context mContext, final ImageView imageView, int picture)
{
    if (mContext != null && imageView != null)
    {
        try
        {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
            {
                imageView.setImageDrawable(mContext.getResources().getDrawable(picture, mContext.getApplicationContext().getTheme()));
            } else
            {
                imageView.setImageDrawable(mContext.getResources().getDrawable(picture));
            }
        } catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}
НИЗКИЙ
источник