studio reales proyectos programacion introducción incluye guia fuente desarrollo código avanzado aplicaciones android shape android-drawable layerdrawable

reales - manual programacion android



Cambio de color en una forma dentro de una lista de capas programáticamente (1)

Estoy tratando de cambiar programáticamente el color de selectable_kachel_shape . Aquí está el archivo xml:

kachel_ticked_style.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape android:id="@+id/selectable_kachel_shape" android:shape="rectangle" > <stroke android:width="5dp" android:color="@color/headrbar_color" /> </shape> </item> <item> <rotate android:fromDegrees="45" android:pivotX="120%" android:pivotY="100%" android:toDegrees="45" > <shape android:shape="line" > <stroke android:width="40dp" android:color="@color/headrbar_color" /> </shape> </rotate> </item> <item android:right="5dp" android:top="5dp"> <bitmap android:gravity="top|right" android:src="@drawable/selectable_tiles_check" /> </item> </layer-list>

Estoy llamando dentro de un Fragmento el siguiente código

LayerDrawable layers = (LayerDrawable) this.getActivity().getResources().getDrawable(R.drawable.kachel_ticked_style); GradientDrawable shape = (GradientDrawable) (layers.findDrawableByLayerId(R.id.selectable_kachel_shape)); shape.setColor(this.getActivity().getResources().getColor(android.R.color.background_dark);

1. ¿Por qué obtengo una NullPointerException en shape.setColor ?

2. ¿Cómo sería posible cambiar el color dentro de una forma, que está dentro de una lista de capas, programáticamente?


Ok, encontré la respuesta, solo tuve que poner la identificación de la forma dentro del elemento que no está en la forma kachel_ticked_style.xml :

<item android:id="@+id/selectable_kachel_shape"> <shape android:shape="rectangle" > <stroke android:width="5dp" android:color="@color/headrbar_color" /> </shape> </item>

Y luego puede cambiar el color de la forma que llama shape.setColor o el color del trazo que llama shape.set Stroke (strokeWidth, strokeColor)