144 votes

Changer l'image d'un ImageView de manière programmatique dans Android

Lorsque je change l'image de façon programmatique, la nouvelle image s'affiche au-dessus de l'ancienne qui est 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 ?

220voto

Voicu Points 2818

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

Utilisez ceci à la place :

qImageView.setBackgroundResource(R.drawable.thumbs_down);

Ici Il y a un fil qui parle des différences entre les deux méthodes.

96voto

fe_araujo_ Points 929

Utilisation en XML :

android:src="@drawable/image"

Utilisation de la source :

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

78voto

Suragch Points 197

Réponse courte

Il suffit de copier une image dans votre res/drawable et utiliser

imageView.setImageResource(R.drawable.my_image);

Détails

La diversité des réponses peut entraîner une certaine confusion. Nous avons

Les méthodes avec Background en leur nom appartiennent tous à la View et non à ImageView spécifiquement. Mais comme ImageView hérite de View vous pouvez également les utiliser. Les méthodes avec Image dans leur nom appartiennent spécifiquement à ImageView .

El View font toutes la même chose l'une que l'autre (bien que setBackgroundDrawable() est déprécié), nous nous concentrerons donc sur setBackgroundResource() . De même, le ImageView font toutes la même chose, nous nous concentrerons donc sur les méthodes suivantes setImageResource() . La seule différence entre les méthodes est le type de paramètre que vous passez.

Configuration

Voici un FrameLayout qui contient un ImageView . Le site ImageView ne contient initialement aucune image. (J'ai seulement ajouté le FrameLayout pour que je puisse mettre une bordure autour. De cette façon, vous pouvez voir le bord de la 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>

Nous allons comparer les différentes méthodes ci-dessous.

setImageResource()

Si vous utilisez la fonction setImageResource() l'image conserve son rapport d'aspect et est redimensionnée pour s'adapter. Voici deux exemples d'images différentes.

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

enter image description here

setBackgroundResource()

Utilisation de View setBackgroundResource() En revanche, la ressource image est étirée pour remplir la vue.

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

enter image description here

Les deux sites

L'image d'arrière-plan de la vue et l'image de l'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

31voto

suraj Points 398
qImageView.setImageResource(R.drawable.img2);

Je pense que cela va vous aider

18voto

Dans la conception XML

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

Image dessinable 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);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X