Змена Малюнак ImageView праграмна ў Android

Калі я змяніць малюнак праграмна, гэта паказвае новы малюнак-над старым ладу, які ўсталяваны першапачаткова ў файле макета?

Вось урывак з майго файла макета:


    

    

 

І што код ўсталёўвае ImageView:

     @Override
public View getChildView(final int groupPosition, final int childPosition,
        boolean isLastChild, View convertView, ViewGroup parent) {
//Answers
            if(answersGroup != null)
                   answersGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                       @Override
                    public void onCheckedChanged(RadioGroup group, int checkedId) {

                        // int index = answersGroup.indexOfChild(findViewById(answersGroup.getCheckedRadioButtonId()));

                           qImageView = (ImageView) V.findViewById(R.id.qStatusImage);
                           if(ans ==0 || ans == 5){
                           //  qSV.setImageResource(0);
                               qImageView.setImageResource(R.drawable.thumbs_up);
                           }
                           else
                               qImageView.setImageResource(R.drawable.thumbs_down);

                       }
                   });

Што мне не хапае?

69
Назва ўводзіць у зман, спроба зрабіць гэта з дакладнасцю да апісання!
дададзена аўтар neferpitou, крыніца

7 адказы

Гэта адбываецца таму, што вы ўсталёўваеце ГКЗ ImageView замест фону.

Выкарыстоўвайце замест гэтага:

qImageView.setBackgroundResource(R.drawable.thumbs_down);

Here's a thread that talks about the differences between the two methods.

132
дададзена
Чаму не setImageResource ?
дададзена аўтар Violet Giraffe, крыніца
@ Адказ Адважны з'яўляецца правільным. Выкарыстанне setBackgroundResource() :( ня выдаліць існуючы лад перад выкарыстаннем новага ладу .. так што я атрымаў два малюнка сутыкаючыся там. <�Код> setImageResource() працаваў Тхо :). Тым не менш .. пошта мяне на правільным шляху - падзяка за абодвух адказаў!
дададзена аўтар gnB, крыніца
@ Адказ Адважны з'яўляецца больш дакладным.
дададзена аўтар Chandrani Chatterjee, крыніца
Не працуе ў API 14. Варта выкарыстоўваць: image.setImageResource (R.drawable.icon_dot1);
дададзена аўтар Brave, крыніца
Як адказ на @mricyicy кажа, праблема заключаецца ў тым, што xml з'яўляецца вызначальным фонавы малюнак і код змяняецца малюнак рэсурсу. Гэта не тое ж самае. Настройка выявы рэсурсу з'яўляецца тое, што на самой справе пажадана тут, так што xml павінна быць выпраўленая.
дададзена аўтар Martin Epsz, крыніца
@VioletGiraffe ImageView.setImageResource (R.drawable.image); працаваў для мяне
дададзена аўтар jonasxd360, крыніца

Выкарыстанне ў XML:

android:src="@drawable/image"

Выкарыстанне Крыніца:

imageView.setImageDrawable(ContextCompat.getDrawable(activity, R.drawable.your_image));
49
дададзена
qImageView.setImageResource(R.drawable.img2);

Я думаю, што гэта дапаможа

22
дададзена

In your xml for the image view, where you have android:background="@drawable/thumbs_down change this to android:src="@drawable/thumbs_down"

У цяперашні час ён з'яўляецца размяшчэнне гэтага выявы ў якасці фону для зроку, а не рэальнае малюнак у ім.

13
дададзена

Кароткі адказ

Проста скапіяваць малюнак у Рэз/выцяжцы тэчкі і выкарыстання

imageView.setImageResource(R.drawable.my_image);

дэталі

Разнастайнасць адказаў можа выклікаць невялікую блытаніну. Мы маем

Метады з Фон у назве належаць да Выгляд клас, а не ImageView канкрэтна. Але так як ImageView спадчыну Выгляд вы можаце выкарыстоўваць іх, таксама. Метады з Выява у назве належаць менавіта да ImageView .

<�Код> Прагляд метады ўсё робяць тое ж самае, што і адзін аднаго (хоць setBackgroundDrawable() з'яўляецца састарэлым), таму мы засяродзімся толькі на setBackgroundResource() , Аналагічна, ImageView метады ўсё робяць тое ж самае, так што мы проста засяродзіцца на setImageResource() . Адзінае адрозненне паміж метадамі, яны тыпу параметру вы перадаеце ст.

Усталяваць

Вось FrameLayout , які ўтрымлівае ImageView . <�Код> ImageView першапачаткова не мае ніякага ладу ў ім. (Я толькі дадаў FrameLayout , так што я мог бы паставіць рамку вакол яго. Такім чынам, вы можаце ўбачыць край ImageView .)

enter image description here

<?xml version="1.0" encoding="utf-8"?>


    

        

    

Ніжэй мы параўнаем розныя метады.

setImageResource ()

If you use ImageView's setImageResource (), then the image keeps its aspect ratio and is resized to fit. Here are two different image examples.

    <�Літый> imageView.setImageResource (R.drawable.sky); </літый> <�Літый> imageView.setImageResource (R.drawable.balloons); </літый>

enter image description here

setBackgroundResource ()

Using View's setBackgroundResource (), on the other hand, causes the image resource to be stretched to fill the view.

    <�Літый> imageView.setBackgroundResource (R.drawable.sky); </літый> <�Літый> imageView.setBackgroundResource (R.drawable.balloons); </літый>

enter image description here

абедзве

The View's background image and the ImageView's image are drawn separately, so you can set them абедзве.

imageView.setBackgroundResource(R.drawable.sky);
imageView.setImageResource(R.drawable.balloons);

enter image description here

7
дададзена
На мой погляд, гэта самы лепшы адказ, дзякуй @Suragch
дададзена аўтар jonasxd360, крыніца

<�Моцны> У XML-дызайн

android:background="@drawable/imagename 
android:src="@drawable/imagename"

<�Моцны> Drawable малюнак з дапамогай кода

imageview.setImageResource(R.drawable.imagename);

<�Моцны> Сервер выявы

  ## Dependency ##

  implementation 'com.github.bumptech.glide:glide:4.7.1'
  annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'

  Glide.with(context).load(url) .placeholder(R.drawable.image)
   .into(imageView);

 ## dependency  ##
 implementation 'com.squareup.picasso:picasso:2.71828'

 Picasso.with(context).load(url) .placeholder(R.drawable.image)
 .into(imageView);
5
дададзена

Вы можаце выкарыстоўваць

val drawableCompat = ContextCompat.getDrawable(context, R.drawable.ic_emoticon_happy)

або ў Java Java

Drawable drawableCompat = ContextCompat.getDrawable(getContext(), R.drawable.ic_emoticon_happy)
0
дададзена