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()); 
  • Uso de la memoria de aplicaciones Android de Xamarin
  • Android: El proceso ha muerto - bajos recursos?
  • Android, obtener ID de recurso de cadena?
  • Android: descarga la imagen desde la URL a la carpeta de activos
  • Excepción en el ajuste del color de fondo
  • Android: ¿Es más eficiente usar un archivo de texto o un archivo XML para almacenar datos estáticos
  • Uso de iconos en las preferencias de Android
  • Cómo eliminar fácilmente los recursos de localización innecesarios de bibliotecas añadidas en la versión APK
  • Android: referencia a recursos en xml personalizado
  • Referencias de recursos de cadenas internas
  • ¿Cómo encontrar cadenas sin traducir? (androide)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.