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.
- ¿Cómo uso los recursos predeterminados de Android en mi layout xml?
- ¿Cómo acceder a los recursos del proyecto de la biblioteca de Android?
- ¿Hay alguna manera de utilizar los recursos android no públicos en mi aplicación?
- Android - ¿Cómo descargar una imagen y usarla como nuevo recurso?
- ID de recurso de Android
Gracias Chris
- Android: ¿Cómo combinar Spannable.setSpan con String.format?
- ¿Cómo obtener eficientemente una matriz corta de recursos en Android?
- Obtener recurso Drawable desde dentro de DefaultHandler
- Columna de 2 columnas con 50% exactamente para cada columna
- Recurso no encontrado de android no encontrado excepción
- Diferentes carpetas de valores en android
- Cambio de locale: ¿Forzar la actividad a recargar recursos?
- Color value drawable resource issue
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);
- ¿Cómo reproducir audio a través del altavoz Bluetooth incluso cuando el auricular está enchufado?
- ¿Por qué se trata de una pérdida de memoria