Hay alguna manera de encontrar el identificador de recursos de dibujable

¿Hay alguna forma de obtener el ID de recurso Drawable? Por ejemplo, estoy usando un ImageView y puedo utilizar inicialmente icon.png como su imagen pero después puedo cambiar la imagen a icon2.png. Quiero averiguar usando el código que la imagen que mi ImageView está utilizando desde el recurso. ¿Hay alguna manera?

7 Solutions collect form web for “Hay alguna manera de encontrar el identificador de recursos de dibujable”

¿Está intentando determinar cuál es la imagen actual en la imageview la imageview , para cambiarla a alguna otra imagen?

Si eso es así que sugiero hacer todo usando código en lugar de xml.

setImageResource() Use setImageResource() para establecer las imágenes iniciales durante la inicialización y realizar un seguimiento de los resource ids se utilizan en algún lugar de su código.

Por ejemplo, puede tener una matriz de imageviews de imageviews con una matriz de int correspondiente que contenga el resource id para cada imageview

Luego, cuando quiera cambiar la imagen, haga un bucle a través de la matriz y vea cuál es el ID.

Este es el mejor método para averiguar el valor R.drawablw.image1 cuando u haga clic en el ImageView en ur prgoram, El método es algo así como en el programa principal en primer lugar guardar el valor de la imagen en la etiqueta como que

 public...activity { //-----this vl store the drawable value in Tag of current ImageView,which v vl retriew in //image ontouchlistener event... ImageView imgview1.setTag(R.drawable.img1); ImageView imgview2.setTag(R.drawable.img2); onTouchListnener event... { ImageView imageView = (ImageView) v.findViewById(R.id.imgview1)v; Object tag = imageView.getTag(); int id = tag == null ? -1 : Integer.parseInt(tag.toString()); switch(id) { case R.drawable.img1: //do someoperation of ur choice break; case R.drawable.img2: //do someoperation of ur choice break: }//end of switch }//end of touch listener event }//end of main activity "PIR FAHIM SHAH/kpk uet mardan campus" 

Crear una imagen personalizada, el resto es simple.

 public class CustomImageView extends ImageView { private int resID; public CustomImageView(Context context) { super(context); } public CustomImageView(Context context, AttributeSet attrs) { super(context, attrs); } public CustomImageView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public void setImageResource(int resId) { this.resID = resId; super.setImageResource(resId); } public int getResourceId() { return resID; } } 

Hay algunos pasos para esto:

  1. Create integer-array xml para mantener nombres de drawables (es decir: "@ drawable / icon1" … "@ drawable / iconN"

  2. Use getIdentifier arriba para obtener la "matriz"

  3. Con ID para la lista de drawable, getStringArray le dará una matriz de nombres de drawables que especificó en el paso 1.

  4. A continuación, utilice cualquiera de los nombres dibujables en la matriz con getIdentifier de nuevo para obtener el ID dibujable. Este uso "dibujable" en lugar de "matriz" tipo.

  5. Utilice este ID para configurar la imagen para su vista.

HOpe esto ayudará.

Ahora que la pregunta es bastante antigua, pero tal vez alguien lo encontrará útil.

Tengo una lista de TextViews con Drawables y deseo fijar los oyentes del tecleo para todos ellos, sin ninguna necesidad de cambiar el código, cuando el diseño se cambia.

Así que he puesto todos los drawables en un hashmap para obtener sus ids más tarde.

Main_layout.xml

 <LinearLayout android:id="@+id/list" > <TextView android:drawableLeft="@drawable/d1" /> <TextView android:drawableLeft="@drawable/d2" /> <TextView android:drawableLeft="@drawable/d3" /> <TextView android:drawableLeft="@drawable/d4" /> <!-- ... --> </LinearLayout> 

MyActivity.java

 import java.lang.reflect.Field; import java.util.HashMap; import android.app.Activity; import android.content.Intent; import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable.ConstantState; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.LinearLayout; import android.widget.TextView; public class MyActivity extends Activity { private final HashMap<ConstantState, Integer> drawables = new HashMap<ConstantState, Integer>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); for (int id : getAllResourceIDs(R.drawable.class)) { Drawable drawable = getResources().getDrawable(id); drawables.put(drawable.getConstantState(), id); } LinearLayout list = (LinearLayout)findViewById(R.id.list); for (int i = 0; i < list.getChildCount(); i++) { TextView textView = (TextView)list.getChildAt(i); setListener(textView); } } private void setListener(TextView textView) { // Returns drawables for the left, top, right, and bottom borders. Drawable[] compoundDrawables = textView.getCompoundDrawables(); Drawable left = compoundDrawables[0]; final int id = drawables.get(left.getConstantState()); textView.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { Intent broadcast = new Intent(); broadcast.setAction("ACTION_NAME"); broadcast.putExtra("ACTION_VALUE", id); sendBroadcast(broadcast); } }); } /** * Retrieve all IDs of the Resource-Classes * (like <code>R.drawable.class</code>) you pass to this function. * @param aClass : Class from R.X_X_X, like: <br> * <ul> * <li><code>R.drawable.class</code></li> * <li><code>R.string.class</code></li> * <li><code>R.array.class</code></li> * <li>and the rest...</li> * </ul> * @return array of all IDs of the R.xyz.class passed to this function. * @throws IllegalArgumentException on bad class passed. * <br><br> * <b>Example-Call:</b><br> * <code>int[] allDrawableIDs = getAllResourceIDs(R.drawable.class);</code><br> * or<br> * <code>int[] allStringIDs = getAllResourceIDs(R.string.class);</code> */ private int[] getAllResourceIDs(Class<?> aClass) throws IllegalArgumentException { /* Get all Fields from the class passed. */ Field[] IDFields = aClass.getFields(); /* int-Array capable of storing all ids. */ int[] IDs = new int[IDFields.length]; try { /* Loop through all Fields and store id to array. */ for(int i = 0; i < IDFields.length; i++){ /* All fields within the subclasses of R * are Integers, so we need no type-check here. */ // pass 'null' because class is static IDs[i] = IDFields[i].getInt(null); } } catch (Exception e) { /* Exception will only occur on bad class submitted. */ throw new IllegalArgumentException(); } return IDs; } } 

Método getAllResourceIDs He usado desde aquí

Otro enfoque: solo necesita crear su propia vista personalizada. Y onCreate. Luego iterar el objeto AttributeSet (attrs) para encontrar el índice de su atributo. Entonces sólo tienes que llamar a getAttributeResourceValue con índice, entonces obtendrás el valor inicial de ResouceID. Un ejemplo sencillo de ampliar ImageView para obtener ResourceID para el fondo:

 public class PhoneImageView extends ImageView { private static final String BACKGROUND="background"; private int imageNormalResourceID; public PhoneImageView(Context context) { super(context); } public PhoneImageView(Context context, AttributeSet attrs) { super(context, attrs); for (int i = 0; i <attrs.getAttributeCount() ; i++) { if(attrs.getAttributeName(i).equals(BACKGROUND)){ imageNormalResourceID =attrs.getAttributeResourceValue(i,-1); } } } public PhoneImageView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } } 

Este acercamiento es conveniente para quién está mirando para almacenar valores iniciales. La solución proporcionada por Bojan Kseneman (+1 voto) es para guardar ref al resourceID cada vez que se cambia la vista.

Puede obtener el ID de una imagen con su nombre por debajo del código.

 int drawableImageId = getResources().getIdentifier(imageName,"drawable", getPackageName()); 
  • ¿Cuándo y por qué se debe utilizar getResources ()?
  • Pantalla Splash mientras carga recursos en la aplicación android
  • ¿Agregar nuevas líneas a un recurso de texto en Android?
  • ¿Hay alguna manera de utilizar los recursos android no públicos en mi aplicación?
  • Android encontrar recurso por id durante el tiempo de ejecución
  • Escapar comillas simples en el recurso xml para Android
  • Android: ¿Cómo puedo incluir un sonido de notificación utilizando un recurso de sonido?
  • Iconos de prioridad en la barra de acción
  • Cómo obtener Resource (int) de String - Android
  • Cómo encontrar View from string en vez de R.id
  • Cambiar valores en matriz no se propaga en la aplicación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.