¿Cómo cambiar una lista de capas dibujable?

Tratando de aprender algunas cosas nuevas y no puede entender esto, cualquier ayuda es apreciada. Dado este código simple que es correcto de la documentación de Google:

Layers.xml:

<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/first_image"> <bitmap android:src="@drawable/android_red" android:gravity="center" /> </item> <item android:id="@+id/second_image" android:top="10dp" android:left="10dp"> <bitmap android:src="@drawable/android_green" android:gravity="center" /> </item> <item android:id="@+id/third_image" android:top="20dp" android:left="20dp"> <bitmap android:src="@drawable/android_blue" android:gravity="center" /> </item> </layer-list> 

Y main.xml:

 <ImageView android:id="@+myImageView" android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/layers" /> 

Pregunta: ¿Cómo hago una referencia programática a uno de los elementos desplegables en la lista de capas para que pueda cambiarla a un dibujable diferente?

Gracias.

Así que ahora tengo mi nuevo dibujable que quiero intercambiar en variable myImage correcto? Ahora, ¿cómo puedo conseguir eso en la lista de capas? Supongo que uso findDrawableByLayerId y setDrawableByLayerId , pero ¿cómo exactamente? O podría estar haciendo completamente mal! ¡Ayuda!

¿Qué estoy tratando de hacer? Cambie el dibujable que se muestra. Por ejemplo, supongo que tenía otro dibujable llamado "android_purple", ¿cómo lo cambiaría en el "android_green" dibujable en el ejemplo de lista de capas anterior?

EDITAR:

Con mi conocimiento limitado aquí es mi código hasta el momento (que no funciona, me sale error que setDrawableByLayerId es indefinido):

 Resources res = getApplicationContext().getResources(); BitmapDrawable newImage = (BitmapDrawable) res.getDrawable(R.drawable.android_purple); //Get replacement image, can't use LayerDrawable or get error. boolean layer_drawable_changed = (setDrawableByLayerId((R.id.second_image), newImage)); //Set new drawable? Error on this line. 

Pregunta: ¿Cómo hago una referencia programática a uno de los elementos desplegables en la lista de capas para que pueda cambiarla a un dibujable diferente?

Esto es lo que intentaría:

Paso # 1: Poner atributos de android:id en los <item> como se ilustra en la documentación

Paso # 2: Cast el resultado getDrawable() a un LayerDrawable

Paso # 3: Call mutate() si no desea afectar a nadie más usando el Drawable (puede ser opcional)

Paso # 4: Llame a setDrawableByLayerId() para establecer / reemplazar un Drawable para un ID de capa dado

Paso 1: Recupere la lista de capas de la carpeta dibujable: (La mina se llamó dígitos en /res/drawable/digits.xml)

 LayerDrawable ld = (LayerDrawable) getResources().getDrawable(R.drawable.digits); 

Paso 2: Nombre la imagen de reemplazo (no la imagen ya en la lista de capas)

 Drawable replace = (Drawable) getResources().getDrawable(R.drawable.replacing_image); 

Paso 3: Reemplace la imagen utilizando el método setDrawableByLayerId (int id, Drawable d)

 boolean testfactor = ld.setDrawableByLayerId(R.id.first_image, replace); 

Esto devuelve un valor booleano que devolverá false si reemplaza la imagen fallida

Paso 4: Cargar vista de imagen principal (básicamente id de capa-lista en el código de diseño xml real)

 ImageView layoutlist1 = (ImageView)findViewById(R.id.layout_list1); 

Paso 5: (re) – Establezca la vista de imagen con su LayerDrawable actualizado diciendo:

 layoutlist1.setImageDrawable(ld); 

RECURSOS: Soy desarrollador de aplicaciones de software y móviles.

Miré por toda la web y un montón de Stackflow.com para llegar a este punto. Todas las respuestas eran como las que ya estaban en esta página. Yo estaba tratando de hacer lo mismo. Entonces pensé en la idea de "actualizar la imagen" y llegué a esto.

Esto debería / también puede funcionar para cuando desea poner un mapa de bits en lugar de uno de los elementos de su lista. Sólo tienes que usar el método replace (setDrawableByLayerId). Para reemplazar en ids. ImageView tiene muchos métodos.

Esto también fue útil: LayerList drawable + conversion to a Bitmap

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.