tema - Cómo cambiar el color de las formas dibujables en Android
cambiar tema aplicacion android studio (5)
Cambiar el color del diseño dinámicamente
LinearLayout Layout = (LinearLayout) findViewById(R.layout.id);
Layout.setBackgroundColor(Color.parseColor("#ffffff"));
Establecer dinámicamente el gradiente de color de fondo
View layout = findViewById(R.id.mainlayout);
GradientDrawable gd = new GradientDrawable(
GradientDrawable.Orientation.TOP_BOTTOM,
new int[] {0xFF616261,0xFF131313});
gd.setCornerRadius(0f);
layout.setBackgroundDrawable(gd);
Estoy desarrollando una pequeña aplicación para Android en la que configuro un recurso dibujable como fondo para el diseño lineal. Ahora, lo que quiero hacer cambia dinámicamente el color de fondo del diseño lineal, pero dentro de un recurso dibujable. Mi código se ve como:
// bcd.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<gradient
android:endColor="#22000000"
android:startColor="#22000000"
android:angle="270" />
<stroke
android:width="3dp"
android:color="@color/white" />
<corners
android:radius="3dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
<LinearLayout
android:id="@+id/lin_llt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
y establezco el fondo para el diseño lineal en mi actividad como esta ...
parentLayout = (LinearLayout) view.findViewById(R.id.lin_llt);
parentLayout.setBackgroundResource(R.drawable.bcd);
Ahora, lo que quiero hacer es cambiar el color de mi recurso dibujable que significa cambiar el color de mi diseño lineal con esquinas redondeadas y el relleno definido en dibujable.
Intenté esto de la siguiente manera
ShapeDrawable bgShape = (ShapeDrawable )parentLayout.getBackground();
bgShape.getPaint().setColor(Color.BLACK);
pero no funciona para mí. Cualquier otra solución.
Entonces, cómo hacerlo ... Necesito ayuda ... gracias ...
Los siguientes trabajos son excelentes para establecer el color del dibujo programable sin cambiar su forma:
parentLayout.getBackground().setColorFilter(
Color.BLACK,
PorterDuff.Mode.SRC_ATOP
);
Podrías probar algo como esto:
Drawable sampleDrawable = context.getResources().getDrawable(R.drawable.balloons);
sampleDrawable.setColorFilter(new PorterDuffColorFilter(0xffff00,PorterDuff.Mode.MULTIPLY));
y para más se puede referir a:
¿Cómo cambiar los colores de un Drawable en Android?
Cambia el color dibujable programáticamente
Android: Cambiar color de forma en tiempo de ejecución
También puedes probar esto:
private static final int[] FROM_COLOR = new int[]{49, 179, 110};
private static final int THRESHOLD = 3;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.test_colors);
ImageView iv = (ImageView) findViewById(R.id.img);
Drawable d = getResources().getDrawable(RES);
iv.setImageDrawable(adjust(d));
}
private Drawable adjust(Drawable d)
{
int to = Color.RED;
//Need to copy to ensure that the bitmap is mutable.
Bitmap src = ((BitmapDrawable) d).getBitmap();
Bitmap bitmap = src.copy(Bitmap.Config.ARGB_8888, true);
for(int x = 0;x < bitmap.getWidth();x++)
for(int y = 0;y < bitmap.getHeight();y++)
if(match(bitmap.getPixel(x, y)))
bitmap.setPixel(x, y, to);
return new BitmapDrawable(bitmap);
}
private boolean match(int pixel)
{
//There may be a better way to match, but I wanted to do a comparison ignoring
//transparency, so I couldn''t just do a direct integer compare.
return Math.abs(Color.red(pixel) - FROM_COLOR[0]) < THRESHOLD && Math.abs(Color.green(pixel) - FROM_COLOR[1]) < THRESHOLD && Math.abs(Color.blue(pixel) - FROM_COLOR[2]) < THRESHOLD;
}
Como se indica en ¿Cómo cambiar los colores de un Drawable en Android?
Un enfoque sería crear un segundo XML dibujable con el segundo color y luego cambiar el fondo del diseño con el segundo dibujable.
utilizar esta..
<solid android:color="#e1e1e1" />
<stroke
android:width="2dp"
android:color="#808080" />
<corners android:radius="10dp" />
<padding
android:bottom="5dp"
android:left="5dp"
android:right="5dp"
android:top="5dp" />