web-dev-qa-db-fra.com

Modifier l’image de ImageView par programme dans Android

Lorsque je modifie l’image par programme, elle affiche une nouvelle image par-dessus l’ancienne image définie à l’origine dans le fichier de mise en page?

Voici un extrait de mon fichier de mise en page:

<LinearLayout
    Android:layout_width="match_parent"
    Android:layout_height="39dp"
    Android:gravity="center_vertical" >
    <ImageView
        Android:id="@+id/qStatusImage"
        Android:layout_width="16dp"
        Android:layout_height="16dp"
        Android:layout_margin="5dp"
        Android:background="@drawable/thumbs_down"
         />

    <TextView
        Android:id="@+id/grp_child"
        Android:layout_width="fill_parent"
        Android:layout_height="fill_parent"
        Android:textColor="@color/radio_colors"
        Android:textStyle="normal"
        Android:background="@color/grey"
    />

 </LinearLayout>

Et le code qui définit l'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);

                       }
                   });

Qu'est-ce que je rate?

92
user1529412

Cela se produit parce que vous définissez la src de la ImageView au lieu de l’arrière-plan.

Utilisez ceci à la place:

qImageView.setBackgroundResource(R.drawable.thumbs_down);

Ici est un fil qui parle des différences entre les deux méthodes.

154
Voicu

Utiliser en XML:

Android:src="@drawable/image"

Utilisation de la source:

imageView.setImageDrawable(ContextCompat.getDrawable(activity, R.drawable.your_image));
62
fe_araujo_

Réponse courte

Copiez simplement une image dans votre dossier res/drawable et utilisez

imageView.setImageResource(R.drawable.my_image);

Détails

La variété des réponses peut causer un peu de confusion. On a

Les méthodes avec Background dans leur nom appartiennent toutes à la classe View et non à ImageView de manière spécifique. Mais puisque ImageView hérite de View, vous pouvez également les utiliser. Les méthodes avec Image dans leur nom appartiennent spécifiquement à ImageView.

Les méthodes View font toutes la même chose (bien que setBackgroundDrawable() soit obsolète), nous allons donc nous concentrer sur setBackgroundResource(). De même, les méthodes ImageView font toutes la même chose, nous allons donc nous concentrer sur setImageResource(). La seule différence entre les méthodes est le type de paramètre que vous transmettez.

Installer

Voici un FrameLayout qui contient un ImageView. La ImageView ne contient initialement aucune image. (J'ai seulement ajouté le FrameLayout pour pouvoir y placer une bordure. Ainsi, vous pourrez voir le bord du ImageView.)

enter image description here

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <FrameLayout
        Android:id="@+id/frameLayout"
        Android:layout_width="250dp"
        Android:layout_height="250dp"
        Android:background="@drawable/border"
        Android:layout_centerInParent="true">

        <ImageView
            Android:id="@+id/imageView"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"/>

    </FrameLayout>
</RelativeLayout>

Ci-dessous, nous allons comparer les différentes méthodes.

setImageResource ()

Si vous utilisez la fonction setImageResource() de ImageView, l'image conserve son rapport de format et est redimensionnée pour s'adapter. Voici deux exemples d’images différents.

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

enter image description here

setBackgroundResource ()

En revanche, l'utilisation de la fonction setBackgroundResource() de View entraîne l'étirement de la ressource image pour remplir la vue.

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

enter image description here

Tous les deux

L'image de fond de la vue et l'image de ImageView sont dessinées séparément, vous pouvez donc les définir toutes les deux.

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

enter image description here

28
Suragch
qImageView.setImageResource(R.drawable.img2);

Je crois que ceci vous aidera

26
suraj

Dans votre XML pour la vue d'image, où vous avez Android:background="@drawable/thumbs_down changez-le en Android:src="@drawable/thumbs_down"

Actuellement, il place cette image en tant qu'arrière-plan de la vue et non l'image réelle qu'il contient.

13
mricyicy

Dans la conception XML

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

Image dessiné via le code

imageview.setImageResource(R.drawable.imagename);

image du serveur

  ## 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);
8

Vous pouvez utiliser

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

ou en Java java

Drawable drawableCompat = ContextCompat.getDrawable(getContext(), R.drawable.ic_emoticon_happy)
0
svkaka