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


257

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

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

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

myImgView.setBackgroundResource(R.drawable.monkey);

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

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

Ответы:


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));
}

о, круто ... к сожалению, я только что узнал, что мне нужно также заменить набор изображений на 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));

5

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

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

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

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

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

Обе

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

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


3

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

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


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();
        }
    }
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.