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?
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.
Utiliser en XML:
Android:src="@drawable/image"
Utilisation de la source:
imageView.setImageDrawable(ContextCompat.getDrawable(activity, R.drawable.your_image));
Copiez simplement une image dans votre dossier res/drawable
et utilisez
imageView.setImageResource(R.drawable.my_image);
La variété des réponses peut causer un peu de confusion. On a
setBackgroundResource()
setBackgroundDrawable()
setBackground()
setImageResource()
setImageDrawable()
setImageBitmap()
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.
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
.)
<?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.
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);
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);
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);
qImageView.setImageResource(R.drawable.img2);
Je crois que ceci vous aidera
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.
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);
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)