android - por - como convertir una imagen a un solo color en photoshop
Cambia programáticamente el color de la forma en la lista de capas (4)
En primer lugar, debe asignar ID a su elemento de layer-list
.
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- First assign id to the list item-->
<item android:id="@+id/your_shape">
<shape android:shape="rectangle">
<solid android:color="#000000" />
</shape>
</item>
<item android:left="5dp">
<shape android:shape="rectangle">
<solid android:color="@color/bg" />
</shape>
</item>
</layer-list>
A continuación, obtener su forma por id.
LayerDrawable shape = (LayerDrawable) getResources().getDrawable(R.drawable.your_shape)
Y puedes cambiar el color de tu forma llamando
shape.setColor(Color.Black); // changing to black color
EDITAR
Como getDrawable()
ha quedado en desuso. Usa la siguiente línea de código.
LayerDrawable shape = (LayerDrawable) ContextCompat.getDrawable(YourActivity.this,R.drawable.your_shape)
¿Cómo puedo cambiar mediante programación el color ( #000000
) de una forma en una lista de capas?
Aquí está mi lista de capas:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="#000000" /> // CHANGE THIS COLOR
</shape>
</item>
<item android:left="5dp">
<shape android:shape="rectangle">
<solid android:color="@color/bg" />
</shape>
</item>
</layer-list>
También puede obtener el dibujo o el fondo de la vista y establecerlo de la siguiente manera.
LayerDrawable layerDrawable = (LayerDrawable) view.getDrawable(); //view.getBackground()
GradientDrawable gradientDrawable = (GradientDrawable) layerDrawable
.findDrawableByLayerId(R.id.layer_list_item_id);
gradientDrawable.setColor(ContextCompat.getColor(getContext(), R.color.colorPrimary));
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/outer">
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size android:height="40dp" android:width="40dp"/>
<padding android:top="3dp" android:bottom="3dp" android:right="3dp" android:left="3dp"/>
<stroke
android:width="1dp"
android:color="#ffffff"/>
</shape>
</item>
<item android:id="@+id/middle">
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size android:height="40dp" android:width="40dp"/>
<padding android:top="2dp" android:bottom="2dp" android:right="2dp" android:left="2dp"/>
<stroke
android:width="3dp"
android:color="#ffffff"/>
</shape>
</item>
<item android:id="@+id/inner">
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size android:height="40dp" android:width="40dp"/>
<solid
android:color="#ffffff"/>
</shape>
</item>
</layer-list>
Encuentra tu vista
LayerDrawable layerDrawable = (LayerDrawable) yourView.getBackground();
GradientDrawable outer = (GradientDrawable) layerDrawable.findDrawableByLayerId(R.id.outer);
GradientDrawable middle = (GradientDrawable) layerDrawable.findDrawableByLayerId(R.id.middle);
GradientDrawable inner = (GradientDrawable) layerDrawable.findDrawableByLayerId(R.id.inner);
Establecer color
outer.setColor(Color.parseColor(#000000));
inner.setColor(Color.parseColor(#FFFFFF));
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/gradientDrawble"> // Give id
<shape android:shape="rectangle">
<solid android:color="#000000" /> // CHANGE THIS COLOR
</shape>
</item>
<item android:left="5dp">
<shape android:shape="rectangle">
<solid android:color="@color/bg" />
</shape>
</item>
</layer-list>
Luego en tu código solo agrega
LayerDrawable layerDrawable = (LayerDrawable) getResources()
.getDrawable(R.drawable.my_drawable);
GradientDrawable gradientDrawable = (GradientDrawable) layerDrawable
.findDrawableByLayerId(R.id.gradientDrawble);
gradientDrawable.setColor(color); // change color
Actualización Oct-2016
getDrawable()
ahora está en desuso, debe usar ContextCompat.getDrawable(context, color)
lugar.
Además, si obtiene LayerDrawable
de findDrawableByLayerId()
, entonces tuvo que llamar a view.setBackground(layerDrawable)
para que esto tenga efecto. Alternativamente, la layerDrawable
instancia de layerDrawable
by view.getBackground()
también funcionó.