2011-06-15 15 views
8

He establecido una imagen para ImageView usando setImageResource(R.drawable.icon1).getImageResource() Android. es posible?

Ahora mi requisito es averiguar cuál es la imagen que se establece para un ImageView y hacer algún procesamiento.

Como

if (imageView.getImageResource() == R.drawable.icon1) { 
    //do some processing 
else if (imageView.getImageResource() == R.drawable.icon2) { 
    //do somethign else 
else 
//display 

así que me gustaría saber si existe un método (que yo sepa, no lo hace) y si no es así cómo mantener un seguimiento de lo que los recursos se han establecido para una ImageView.

Gracias. Sana.

+0

¿Por qué no lo hace usted mismo, si usted es el que hace el ajuste? – Yuliy

+0

No entiendo lo que quiere transmitir. Puedes explicar. – Sana

+0

Estoy sugiriendo simplemente almacenar el ID de la imagen que configuró en el imageView en alguna otra ubicación cuando lo configuró, como sugirió Joe. – Yuliy

Respuesta

6

Estás asumiendo que ya que poner un número entero en, usted es capaz de conseguir un número entero de vuelta, y no es así como setImageResource() obras. Ver ImageView#setImageResource(). Este es solo un método conveniente para ti: lo que Android está haciendo detrás de escena, está buscando el recurso Drawable (en la mayoría de los casos, es un BitmapDrawable, pero podría ser de cualquier tipo), y luego aplica ese recurso a ImageView como un Objeto de mapa de bits (es decir, solo datos de imagen; no tiene idea de cuál era originalmente su "Id. De recurso").

La mejor solución se va a hacer el seguimiento de la última ID de recurso que utilizó:

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

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

Debería poder usar Bundle y establecer las propiedades que necesite.

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

¿Eh? Debe estar pensando en el método 'imageView.setTag (Object)' en su lugar. – dmon

0

Otra alternativa, si es posible, sería subclase el ImageView y almacenar el número entero en un setImageResource() sustituido .

public class MyImageView extends ImageView { 
    int rememberId = -1; 
    @override void setImageResource(int resId){ 
    rememberId = resId; 
    } 
    int getMyResId(){ 
    return rememberId; 
    } 
} 
0
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; 
} 

} 
5

Usted debe ser capaz de utilizar la propiedad etiqueta de la siguiente manera:

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; 

    ... 
} 
+1

Esta es la respuesta correcta –

Cuestiones relacionadas