Зміна джерела ImageView


257

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

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

Тепер мені потрібно змінити це зображення програмно. Що мені потрібно зробити, це видалити старе зображення та додати нове. Що я зробив, це:

myImgView.setBackgroundResource(R.drawable.monkey);

Це працює, але я помітив, що андроїд укладає нове зображення поверх старого (не питайте мене, як я дізнався, що це не стосується дискусії :) Мені обов'язково потрібно позбутися старого, перш ніж встановлювати новий образ.

Як я можу цього досягти?

Відповіді:


635

Зміна джерела ImageView:

Використовуючи setBackgroundResource()метод:

  myImgView.setBackgroundResource(R.drawable.monkey);

ви ставите цю мавпу на задній план.

Я пропоную використовувати setImageResource()метод:

  myImgView.setImageResource(R.drawable.monkey);

або setImageDrawable()методом:

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

*** З новим Android 22 API 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.setImageDravable (img); код, який ви запропонували myImgView.setImageResource (R.dravable.monkey); не в змозі це зробити. як я можу позбутися від малюючого, перш ніж винести мавпу? :) велике спасибі
нурден

1
getDrawable (int) тепер застарілий, а getDrawable (int, тема) доданий в API-21. Тепер що робити? Чи можете ви, будь ласка, оновити свою відповідь?
mubeen

Для дзвінка потрібен рівень 16 API (поточний хв. 13): android.widget.ImageView#setBackground
Іман Мараші

ContextCompatщоб отримати доступ до getTheme
малювання


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

Якщо ви хочете встановити в перегляді зображень зображення, яке знаходиться всередині режиму 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.