2010-06-30 4 views
10

Existe-t-il un moyen de trouver la ressource à laquelle un ImageButton est défini, à un moment donné? Par exemple: J'ai un ImageButton que j'ai défini sur R.drawable.btn_on surCréer. Plus tard, à un certain point, ImageButton est défini sur R.drawable.btn_off. Je veux être en mesure de vérifier à quelle ressource ImageButton est définie dans mon code.Android ImageButton - détermine quelle ressource est actuellement définie

Merci Chris

Répondre

16

Utilisez simplement setTag() et getTag() pour associer et récupérer des données personnalisées pour votre ImageView.

+0

Merci, j'ai aussi appris quelque chose. Semble beaucoup plus facile en effet. – Joubarc

0

Je ne sais pas comment accéder à la ressource directement, mais pour ce que vous essayez d'atteindre, ne serait-il suffisant pour obtenir exactement l'état?

ImageButton btn = (ImageButton) findViewById(R.id.btn); 

    int [] states = btn.getDrawableState(); 
    for (int i : states) { 
     if (i == android.R.attr.state_pressed) { 
      Log.v("btn", "Button in pressed state"); 
     } 
    } 

http://developer.android.com/reference/android/R.attr.html#state_pressed

+1

Vous n'avez pas besoin de la boucle for. – Siddharth

3

Vous pouvez définir votre propre classe comme un enfant de ImageButton, ajouter une variable int privée et définir quand setImageResource(int) est appelé. Quelque chose comme:

public class MyImageButton extends ImageButton { 

    private int mImageResource = 0; 

    @Override 
    public void setImageResource (int resId) { 
     mImageResource = resId; 
     super.setImageResource(resId); 
    } 

    public int getImageResource() { 
     return mImageResource; 
    } 
} 

Je n'ai pas testé, mais vous voyez l'idée - alors vous pouvez appeler getImageResource() sur votre bouton, en supposant qu'il a été établi précédemment setImageResource().

+0

Cela dit, je suis d'accord avec slup - si vous voulez tester l'état de votre bouton, il existe des moyens plus logiques pour le faire. – Joubarc

0

La documentation sur android docs est incorrecte. Ici, il indique que pickDropPoint.getDrawableState()[android.R.attr.state_pressed] renvoie true ou false, mais à la place il renvoie 1 ou 0, un **int**.

je devais faire ce qui suit pour le faire fonctionner

  <ImageButton 
      android:id="@+id/pickDropPoint" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_weight="6" 
      android:background="#EEeeeee4" 
      android:contentDescription="pick or drop point" 
      android:src="@drawable/pickupdrop" /> 

xml drawable pour avoir l'impression de

<?xml version="1.0" encoding="utf-8"?> 

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:src="@drawable/start32" android:state_pressed="true"/> 
    <item android:src="@drawable/end32" android:state_pressed="false"/> 
    <corners 
     android:bottomLeftRadius="3dp" 
     android:bottomRightRadius="3dp" 
     android:topLeftRadius="3dp" 
     android:topRightRadius="3dp" /> 

</selector> 

Dans le code, vous ne avez pas besoin de la boucle comme suggéré par @slup

whichPoint = (pickDropPoint.getDrawableState()[android.R.attr.state_pressed] > 1 ? PICKUP : DROP); 
Questions connexes