IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants graphiques Android Discussion :

changer aspet ImageView/Button dans une classe


Sujet :

Composants graphiques Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2011
    Messages
    64
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 64
    Par défaut changer aspet ImageView/Button dans une classe
    Bonjour

    Je vous expose mon problème.
    Dans mon layout, j'ai une ImageView qui est de base sans background (au niveau du .xml)
    Et, ce que je souhaite, c'est qu'elle prenne comme aspect un png qui se trouve dans mes drawable lors d'un évènement.
    Pour associer cette imageView a une image au niveau du .xml, j'ai pas de soucis, mais par contre je n'y arrive pas dans le .java (j'ai essayer plusieurs méthode sans succès, donc je ne sais plus quoi utiliser)

    Et, par la même occasion, une fois que j'aurais réussis a afficher mon imageView, j'aimerais pouvoir la désafficher en cliquant dessus, et là non plus, je vois pas trop comment faire.

    Ps : vu que j'arrivais pas a faire ca avec une ImageView, j'ai tenter avec un Bouton, mais c'est pareil, je vois pas quelles méthodes je dois utiliser au niveau du .java

    Cordialement

  2. #2
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    Utilises setImageDrawable.

    http://developer.android.com/referen...hics.Bitmap%29

    Pour récupérer le drawable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static Drawable createFromResourceStream (Resources res, TypedValue value, InputStream is, String srcName, BitmapFactory.Options opts)
    http://developer.android.com/referen...ory.Options%29

    Méfie toi , lorsque on change une image view de drawable il faut bien la recycler avant , sinon tu auras une fuite de mémoire dessus . Par contre le recycle ce fait sur la bitmap contenu dans l'imageview .
    http://developer.android.com/referen...#recycle%28%29

  3. #3
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2011
    Messages
    64
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 64
    Par défaut
    Merci beaucoup pour ta réponse, ca m'a pas mal aidé.
    Il me reste encore deux questions.

    J'ai parfois besoin de supprimer l'imageView(ou tout du moins son contenu) lorsque je clique dessus. Et, pour le moment, ce que je fais, c'est que je rechange son Drawable avec un png transparent, mais je me doute que c'est pas le mieux a faire. Est ce qu'il y a un moyen de faire ca, c'est a dire enlever le contenu de l'imageView ?

    Et, seconde question, comment est ce que je dois utiliser la méthode recycle() ? (comment attraper le Bitmap de l'imageView en gros)

    Cordialement

  4. #4
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    J'ai parfois besoin de supprimer l'imageView(ou tout du moins son contenu) lorsque je clique dessus. Et, pour le moment, ce que je fais, c'est que je rechange son Drawable avec un png transparent, mais je me doute que c'est pas le mieux a faire. Est ce qu'il y a un moyen de faire ca, c'est a dire enlever le contenu de l'imageView ?

    Et, seconde question, comment est ce que je dois utiliser la méthode recycle() ? (comment attraper le Bitmap de l'imageView en gros)

    Pour recycler l'image d'une image view c'est comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    BitmapDrawable dw = (BitmapDrawable) iv.getDrawable();
    		if (dw != null) {
    			Bitmap bmpold = dw.getBitmap();
    			if (bmpold != null)
    				bmpold.recycle();
    		}
    Après il te suffit de y ré-insérer un drawable dans la bitmap , sachant que l'imageview n'a plus de contenu .
    Le fait de faire un recycle sur ta bitmap , efface le contenu .

    Maintenant si tu veux enlever la bitmap sur un click , tu peux toujours la cacher via un setVisibilty(View.GONE ou VIEW.INVISIBLE) . Par ce biais tu auras toujours ton image en mémoire prête à être ré affiché .

  5. #5
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2011
    Messages
    64
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 64
    Par défaut
    Merci pour ta réponse.
    Mais, ca ne fonctionne pas.
    J'ai mis un log pour vérifier, et la partie "if(bitmap != null) bitmap.recycle();" est bien exécuter.
    Mais, l'image est toujours là.
    Ça viendrait pas du fait que mon png est en local ?
    Et, malheureusement, je peux pas utiliser la méthode de la cacher ou non, car l'image peux varier en fait (en gros, l'utilisateur fait un chois de prix, ce qui affiche un png spécifique a ce prix, puis, quand il click sur l'icone, elle s'efface, et quand l'utilisateur rechoisis un prix, un autre png s'affiche (et il peux être différent du premier))

    Cordialement

  6. #6
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Après il te suffit de y ré-insérer un drawable dans la bitmap , sachant que l'imageview n'a plus de contenu .
    Le fait de faire un recycle sur ta bitmap , efface le contenu .
    Je le croyais .
    public void recycle ()
    Since: API Level 1

    Free the native object associated with this bitmap, and clear the reference to the pixel data. This will not free the pixel data synchronously; it simply allows it to be garbage collected if there are no other references. The bitmap is marked as "dead", meaning it will throw an exception if getPixels() or setPixels() is called, and will draw nothing. This operation cannot be reversed, so it should only be called if you are sure there are no further uses for the bitmap. This is an advanced call, and normally need not be called, since the normal GC process will free up this memory when there are no more references to this bitmap.

    Donc il nettoie juste la bitmap.

    Tu peux toujours suite au recycle(), insérer une image par défaut dans l'imageview .

    Et, malheureusement, je peux pas utiliser la méthode de la cacher ou non, car l'image peux varier en fait (en gros, l'utilisateur fait un chois de prix, ce qui affiche un png spécifique a ce prix, puis, quand il click sur l'icone, elle s'efface, et quand l'utilisateur rechoisis un prix, un autre png s'affiche (et il peux être différent du premier))
    La solution de cacher l'imageview ne change en rien le changement de bitmap , tu peux toujours changer l'image lorsque l'imageview est caché et ré-afficher celle ci plus tard .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. changer l'image d'une div placé dans une class
    Par stephane1978 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/06/2012, 11h17
  2. Alertdialog dans une classe ImageView
    Par Invité dans le forum Composants graphiques
    Réponses: 4
    Dernier message: 19/05/2012, 11h30
  3. changer l'attribut etat dans une class
    Par amen_1919 dans le forum W4 Express
    Réponses: 16
    Dernier message: 07/05/2008, 13h03
  4. Réponses: 8
    Dernier message: 17/04/2007, 11h35
  5. Fonction callback dans une classe
    Par julian_ross dans le forum MFC
    Réponses: 8
    Dernier message: 02/03/2004, 11h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo