versiones pie oreo developer descargar android

oreo - android pie



Cambia el color dibujable programáticamente (12)

Estoy tratando de cambiar el color en una imagen de marcador blanco por código. He leído que el código a continuación debería cambiar el color, pero mi marcador permanece en blanco.

Drawable.setColorFilter( 0xffff0000, Mode.MULTIPLY )

¿Me he perdido algo? ¿Hay alguna otra forma de cambiar los colores en mis dibujables ubicados en mi carpeta de res?


Es posible que deba llamar a mutate () en el dibujo o, de lo contrario, todos los iconos se verán afectados.

Drawable icon = ContextCompat.getDrawable(getContext(), R.drawable.ic_my_icon).mutate(); TypedValue typedValue = new TypedValue(); getContext().getTheme().resolveAttribute(R.attr.colorIcon, typedValue, true); icon.setColorFilter(typedValue.data, PorterDuff.Mode.SRC_ATOP);


Es posible que desee probar Mode.LIGHTEN o Mode.DARKEN . Los Javadocs de Android son horribles al explicar lo que hacen los modos PorterDuff. Puede echarles un vistazo aquí: PorterDuff | Androide

Sugiero mirar alrededor de Compositing en el sitio de Mozilla here. (No tienen todos los modos que usa Android, pero tienen muchos de ellos)


Esto es lo que hice:

public static Drawable changeDrawableColor(int drawableRes, int colorRes, Context context) { //Convert drawable res to bitmap final Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), drawableRes); final Bitmap resultBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth() - 1, bitmap.getHeight() - 1); final Paint p = new Paint(); final Canvas canvas = new Canvas(resultBitmap); canvas.drawBitmap(resultBitmap, 0, 0, p); //Create new drawable based on bitmap final Drawable drawable = new BitmapDrawable(context.getResources(), resultBitmap); drawable.setColorFilter(new PorterDuffColorFilter(context.getResources().getColor(colorRes), PorterDuff.Mode.MULTIPLY)); return drawable; }


Esto funcionó para mí. Asegúrese de poner "ff" entre 0x y el código de color. Me gusta esto 0xff2196F3

Drawable mDrawable = ContextCompat.getDrawable(MainActivity.this,R.drawable.ic_vector_home); mDrawable.setColorFilter(new PorterDuffColorFilter(0xff2196F3,PorterDuff.Mode.SRC_IN));


He escrito una función genérica en la que puedes pasar el contexto, el ícono es el ícono de id sorteable / imagen de mipmap y el nuevo color que necesitas para ese ícono.

Esta función devuelve un dibujable.

public static Drawable changeDrawableColor(Context context,int icon, int newColor) { Drawable mDrawable = ContextCompat.getDrawable(context, icon).mutate(); mDrawable.setColorFilter(new PorterDuffColorFilter(newColor, PorterDuff.Mode.SRC_IN)); return mDrawable; } changeDrawableColor(getContext(),R.mipmap.ic_action_tune, Color.WHITE);


Igual que la respuesta aceptada pero un método de conveniencia más simple:

val myDrawable = ContextCompat.getDrawable(context, R.drawable.my_drawable) myDrawable.setColorFilter(Color.GREEN, PorterDuff.Mode.SRC_IN) setCompoundDrawablesWithIntrinsicBounds(myDrawable, null, null, null)

Tenga en cuenta que el código aquí es Kotlin.


Otra forma de hacer esto en Lollipop, Android 5. + es establecer un tinte en un mapa de bits dibujable como tal:

<?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/ic_back" android:tint="@color/red_tint"/>

Esto funcionará para usted si tiene una cantidad limitada de colores que desea usar en sus artículos descartables. Echa un vistazo a la publicación de mi blog para más información .


Puede probar ColorMatrixColorFilter, ya que el color de su clave es blanco:

// Assuming "color" is your target color float r = Color.red(color) / 255f; float g = Color.green(color) / 255f; float b = Color.blue(color) / 255f; ColorMatrix cm = new ColorMatrix(new float[] { // Change red channel r, 0, 0, 0, 0, // Change green channel 0, g, 0, 0, 0, // Change blue channel 0, 0, b, 0, 0, // Keep alpha channel 0, 0, 0, 1, 0, }); ColorMatrixColorFilter cf = new ColorMatrixColorFilter(cm); myDrawable.setColorFilter(cf);


Puedes probar esto para ImageView. usando setColorFilter ().

imageViewIcon.setColorFilter(ContextCompat.getColor(MainActivity.this, R.color.colorWhite));


Simplemente usa

android:drawableTint="@color/primary_color"

en su archivo XML. Reemplace primary_color por color personalizado


prueba esto:

Drawable mDrawable = context.getResources().getDrawable(R.drawable.balloons); mDrawable.setColorFilter(new PorterDuffColorFilter(0xffff00,PorterDuff.Mode.MULTIPLY));

Editar: getDrawable(int id) está en desuso en la versión actual de Android.

Use ContextCompat.getDrawable(context, R.drawable.balloons); para este ejemplo.


puedes probar esto para svg vector drawable

DrawableCompat.setTint(myImageView.getDrawable(), ContextCompat.getColor(context, R.color.another_nice_color));