11
votes

getimageresource () Android. Est-ce possible?

J'ai défini une image pour un imageview à l'aide du setimageresource (r.drawable.icon1) .

Maintenant, mon besoin est de savoir quelle est l'image définie pour un imageview et faire un certain traitement.

comme xxx

Je voudrais donc savoir s'il existe une méthode (Afaik, cela ne signifie pas) et s'il ne contient pas comment garder une trace de quelles ressources ont été définies pour un imageview .

merci. Sana.


4 commentaires

Pourquoi ne pas simplement le faire vous-même, si vous êtes celui qui fait le cadre?


Je ne comprends pas ce que vous voulez transmettre. Peux-tu expliquer.


Je suggère de stocker simplement l'ID de l'image que vous avez définie dans l'imageView dans un autre lieu lorsque vous l'avez définie, comme le suggéra Joe.


La pensée est que je définit des identifiants d'images de numéro 'n'. Donc, je ne sais pas combien d'identifiants je dois garder une trace de, donc je voulais juste si Android pouvait me donner les identifiants de la vue qui est cliqué.


5 Réponses :


-1
votes

Vous devriez pouvoir utiliser le paquet et définir les propriétés dont vous avez besoin.

Intent i = new Intent();      
Bundle extras = new Bundle();
      i.putExtra("prop", "value");


1 commentaires

Hein? Vous devez penser à la méthode imageview.settag (objet) à la place.



7
votes

Vous supposez que parce que vous mettez un entier dans, vous êtes en mesure d'obtenir un entier de retour entier, et ce n'est pas la manière dont setimageresource () code> fonctionne. Voir imageview # Setimageresource () . C'est juste une méthode de commodité pour vous: ce que fait Android fait dans les coulisses, lève la ressource introactive (dans la plupart des cas, c'est un bitMapDrawable, mais il pourrait être n'importe quel type), puis appliquer cette ressource à l'imageView en tant que Objet bitmap (c'est-à-dire des données d'image uniquement - il n'a aucune idée de son "ID de ressource" original précédemment).

Votre meilleure solution va suivre la trace de la dernière carte d'identité que vous avez utilisée: p >

imageView.setImageResource(R.drawable.image1);
this.mLastResourceId = R.drawable.image1;
// ...

// Later, when checking the resource:
if (this.mLastResourceId == R.drawable.image1) {
    // Do something
}


0 commentaires

0
votes

Une autre alternative, si possible, serait de sous-classer l'imageView et de stocker l'entier dans une norme remplaçante SettimagereSource ().

public class MyImageView extends ImageView  {
  int rememberId = -1;
  @override void setImageResource(int resId){
    rememberId = resId;
  }  
  int getMyResId(){
    return rememberId;
  }
}


0 commentaires

0
votes
package com.widget;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ImageButton;

/**
 * custom star type imagebutton that can be obtain the background image resource
 * id.
 * 
 * </p> your layout xml resource might be like the following code: <br>
 * <view class="com.widget.StarButton" <br>
 *      android:id="@+id/starButton" <br>
 *      android:layout_width="wrap_content" <br>
 *      android:layout_height="wrap_content" <br>
 *      android:background="@android:color/background_light" <br>
 *      android:paddingTop="10dp" <br>
 *      android:src="@drawable/star" /> <br>
 * 
 * @author Jeffen
 * 
 */
public class StarButton extends ImageButton {
private int mLastResourceId = -1;

public StarButton(Context context) {
    super(context);
}

public StarButton(Context context, AttributeSet attrs) {
    this(context, attrs, android.R.attr.imageButtonStyle);
}

public StarButton(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    setFocusable(true);
}

/**
 * set image resource and sync image resource id.
 */
@Override
public void setImageResource(int resId) {
    super.setImageResource(resId);

    setImageResourceId(resId);
}

public int getImageResourceId() {
    return mLastResourceId;
}

public void setImageResourceId(int resId) {
    mLastResourceId = resId;
}

}

0 commentaires

8
votes

Vous devriez pouvoir utiliser la propriété Tag comme suit:

imageView.setImageResource(R.drawable.icon1);
imageView.setTag(Integer.valueOf(R.drawable.icon1));

// later

int drawable = (Integer) imageView.getTag();

switch(drawable) {

    case R.drawable.icon1:
         // do_something....
         break;

    case R.drawable.icon2:
         // do_something....
         break;

    ...
}


0 commentaires