Android ImageButton – determina qué recurso está configurado actualmente

¿Hay alguna manera de encontrar qué recurso está configurado un determinado ImageButton, en un momento dado?

Por ejemplo: Tengo un ImageButton que establezco en R.drawable.btn_on onCreate. Posteriormente, en algún momento, ImageButton se establece en R.drawable.btn_off . Quiero poder comprobar qué recurso el ImageButton se fija a en mi código.

Gracias Chris

Sólo use setTag() y getTag() para asociar y recuperar datos personalizados para ImageView .

Puede definir su propia clase como un hijo de ImageButton , agregar una variable int privada y establecerla cuando se setImageResource(int) . Algo como:

 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; } } 

No lo probé, pero usted consigue la idea – entonces usted puede llamar a getImageResource () en su botón, asumiendo que se ha fijado previamente con setImageResource ().

No sé cómo acceder al recurso directamente, pero para lo que intenta lograr, no sería suficiente para obtener el estado?

  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

La documentación de los documentos Android es incorrecta. Aquí se indica que pickDropPoint.getDrawableState()[android.R.attr.state_pressed] devuelve true o false , pero en su lugar devuelve 1 o 0 , un **int** .

Tuve que hacer lo siguiente para que funcionara

  <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" /> 

El xml extraíble para el tacto prensado

 <?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> 

En código, no necesita el bucle for como lo sugiere @slup

 whichPoint = (pickDropPoint.getDrawableState()[android.R.attr.state_pressed] > 1 ? PICKUP : DROP); 
  • No se encontró ningún recurso que coincida con el nombre dado
  • "@android: dibujable / ic_" vs "@ * android: drawable / ic_"
  • Cómo obtener Resource (int) de String - Android
  • Android: ¿Cómo puedo incluir un sonido de notificación utilizando un recurso de sonido?
  • Samsung Galaxy Nexus diseño / estructura estirable?
  • Android encontrar recurso por id durante el tiempo de ejecución
  • Cómo leer el archivo de res / raw por nombre
  • ¿Cuándo y por qué se debe utilizar getResources ()?
  • ¿Ayuda a analizar resources.arsc?
  • Android: referencia a recursos en xml personalizado
  • Resources.ap_ no existe cuando compile mi proyecto android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.