android - studio - ¿Cómo cambiar una lista de capas drawable?
drawable traduccion (2)
Tratando de aprender algunas cosas nuevas y no se puede entender esto, se agradece cualquier ayuda. 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 referencia programática a uno de los elementos extraíbles en la lista de capas para poder cambiarlo a un dibujo diferente?
Gracias.
¿Así que ahora tengo mi nuevo dibujable que quiero intercambiar en la variable myImage
correcta? ¿Ahora cómo lo consigo en la lista de capas? Supongo que uso findDrawableByLayerId
y setDrawableByLayerId
, pero ¿cómo exactamente? ¡O podría hacerlo completamente mal! ¡Ayuda!
¿Qué estoy tratando de hacer? Cambia el dibujo que se muestra. Por ejemplo, supongamos que tengo otro drawable llamado "android_purple", ¿cómo lo cambiaría por el dibujante "android_green" en el ejemplo de la lista de capas anterior?
EDITAR:
Con mi conocimiento limitado aquí está mi código hasta ahora (que no funciona, obtengo el error de que setDrawableByLayerId
no está definido):
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 referencia programática a uno de los elementos extraíbles en la lista de capas para poder cambiarlo a un dibujo diferente?
Esto es lo que probaría:
Paso # 1: android:id
atributos android:id
en los <item>
como se ilustra en la documentación
Paso # 2: Emitir el resultado getDrawable()
a un LayerDrawable
Paso # 3: Llamada mutate()
si no quieres afectar a nadie más usando el Drawable
(puede ser opcional)
Paso # 4: Llamar a setDrawableByLayerId()
para establecer / reemplazar un Drawable
para una identificación de capa dada
Paso 1: Recuperar la lista de capas de la carpeta dibujable: (La mía se denominó 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 que ya está en la lista de capas)
Drawable replace = (Drawable) getResources().getDrawable(R.drawable.replacing_image);
Paso 3: Reemplace la imagen usando el método setDrawableByLayerId (int id, Drawable d)
boolean testfactor = ld.setDrawableByLayerId(R.id.first_image, replace);
Esto devuelve un valor booleano que devolverá falso si no se reemplazó la imagen
Paso 4: carga la vista de la imagen principal (básicamente id de la lista de capas en el código de diseño xml real)
ImageView layoutlist1 = (ImageView)findViewById(R.id.layout_list1);
Paso 5: (re): configure la vista de imagen con su LayerDrawable actualizado diciendo:
layoutlist1.setImageDrawable(ld);
RECURSOS: soy un desarrollador de software y aplicaciones móviles.
Busqué en toda la web y mucho de Stackflow.com para llegar a este punto. Todas las respuestas fueron como las que ya estaban en esta página. Intentaba hacer lo mismo. Luego pensé en la idea de "actualizar la imagen" y llegué a esto.
Esto también debería funcionar para cuando quieras poner un mapa de bits en lugar de uno de los elementos en tu lista. Solo tiene que usar el método replace (setDrawableByLayerId). para reemplazar en los ID. ImageView tiene muchos métodos.
Esto también fue útil: LayerList drawable + conversión a un mapa de bits