lundi 11 novembre 2013

Android - récupérer les images contenues dans un widget ImageView

Bonjour,

Lors d'un exercice de l'annexe 2 , nous avions à modifier l'élément drawable à l'intérieur d'un widget ImageView. Certains d'entre vous ont demandé comment récupérer l'image présente dans le ImageView. Voici le résultat de mes recherches.

Drawable d = image.getDrawable();

Cette ligne nous permet de récupérer l'objet Drawable associé à un ImageView ( ici appelé image ).

Drawable stromae = getResources().getDrawable(R.drawable.stromae);
Drawable reflektor = getResources().getDrawable(R.drawable.reflektor);

Ces deux lignes, dans le contexte de l'exercice, retournent des objets Drawable correspondant aux deux images utilisées. Ensuite, on pourra comparer le Drawable présent dans l'ImageView avec ces deux Drawables avec la méthode equals...


if ( d.equals(stromae))

CA NE FONCTIONNE PAS...parce que la méthode equals n'est pas redéfinie pour la classe Drawable...( voir cours B33 )



On est dans un cul-de-sac à moins de réaliser une sous-classe de la classe Drawable et d'y redéfinir la méthode equals, un peu long...

L'autre approche est d'utiliser les Tags. Un tag peut être associé à un widget ( n'importe quel objet dont la superclasse est View ) afin d'ajouter de l'information sur ce widget. On peut l'utiliser à la fois dans le XML ( propriété android:tag ) ou dans le code java ( getTag, setTag )

On associe donc un tag à notre ImageView :


        android:id="@+id/imageView1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:src="@drawable/stromae"
        android:layout_weight="0.67"
        android:tag="stromae" />

et on travaille dans notre .java :

if ( image.getTag().equals("stromae"))
{
image.setImageResource(R.drawable.reflektor);
image.setTag("reflektor");
}
else
{
image.setImageResource(R.drawable.stromae);
image.setTag("stromae");
}


Merci à Louis D. pour la curiosité, 

Aucun commentaire: