android — Измените цвет рисования программно" />

Измените цвет рисования программно

Я пытаюсь изменить цвет на белом маркерном изображении по коду. Я прочитал, что код ниже должен изменить цвет, но мой маркер остается белым.

Drawable.setColorFilter( 0xffff0000, Mode.MULTIPLY )

Я что-то пропустил? Есть ли другой способ изменить цвета на моих чертежах, расположенных в папке res?

90 голосов | спросил Johan 7 J000000Saturday12 2012, 20:02:02

12 ответов


0

попробуйте это

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

Изменить: getDrawable(int id) устарело в текущей версии Android.

Используйте ContextCompat.getDrawable(context, R.drawable.balloons); для этого примера.

ответил ρяσѕρєя K 7 J000000Saturday12 2012, 20:12:04
0

Вы можете попробовать это для svg vector drawable

DrawableCompat.setTint(
    myImageView.getDrawable(),
    ContextCompat.getColor(context, R.color.another_nice_color)
);
ответил amorenew 6 +03002016-10-06T12:40:44+03:00312016bEurope/MoscowThu, 06 Oct 2016 12:40:44 +0300 2016, 12:40:44
0

Еще один способ сделать это на Lollipop, android 5. + - настроить оттенок на растровое изображение, которое можно нарисовать следующим образом:

<?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"/>

Это будет работать для вас, если у вас есть ограниченное количество цветов, которые вы хотите использовать в своих чертежах. Ознакомьтесь с моим блогом для получения дополнительной информации .

ответил MinceMan 9 TueEurope/Moscow2014-12-09T20:03:02+03:00Europe/Moscow12bEurope/MoscowTue, 09 Dec 2014 20:03:02 +0300 2014, 20:03:02
0

Возможно, вам потребуется вызвать mutate () для рисования, иначе это затронет все значки.

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);
ответил shicky 21 Jam1000000amThu, 21 Jan 2016 10:11:06 +030016 2016, 10:11:06
0

Вы можете попробовать ColorMatrixColorFilter, поскольку ваш ключевой цвет белый:

// 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);
ответил tiguchi 7 J000000Saturday12 2012, 20:38:25
0

Я написал обобщенную функцию, в которой вы можете передавать контекст, icon is id drawable /mipmap image icon и новый цвет, который вам нужен для этой иконки.

Эта функция возвращает отрисовку.

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);
ответил Sachin Tanpure 20 MaramMon, 20 Mar 2017 11:28:19 +03002017-03-20T11:28:19+03:0011 2017, 11:28:19
0

Вы можете попробовать это для ImageView. используя setColorFilter().

imageViewIcon.setColorFilter(ContextCompat.getColor(MainActivity.this, R.color.colorWhite));
ответил Jaydip Meghapara 16 Jpm1000000pmTue, 16 Jan 2018 12:03:32 +030018 2018, 12:03:32
0

Это сработало для меня. Обязательно ставьте «ff» между 0x и цветовым кодом. Как это 0xff2196F3

Drawable mDrawable = ContextCompat.getDrawable(MainActivity.this,R.drawable.ic_vector_home);
                    mDrawable.setColorFilter(new
                            PorterDuffColorFilter(0xff2196F3,PorterDuff.Mode.SRC_IN));
ответил Bek 15 32017vEurope/Moscow11bEurope/MoscowWed, 15 Nov 2017 07:14:45 +0300 2017, 07:14:45
0

Вы можете попробовать Mode.LIGHTEN или Mode.DARKEN

Я предлагаю посмотреть на Compositing на сайте Mozilla здесь . (у них нет всех режимов, которые есть у андроида, но их много)

ответил sebsebmc 7 J000000Saturday12 2012, 20:12:55
0

То же, что и принятый ответ, но более простой удобный метод:

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

Обратите внимание, код здесь - Kotlin.

ответил CorayThan 18 Maypm17 2017, 20:51:17
0

Просто используйте

    android:drawableTint="@color/primary_color"

в вашем XML-файле. Замените основной цвет на пользовательский цвет

ответил Arvina Kori 14 FebruaryEurope/MoscowbWed, 14 Feb 2018 16:13:08 +0300000000pmWed, 14 Feb 2018 16:13:08 +030018 2018, 16:13:08
0

Это то, что я сделал:

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;
}
ответил Edwin 16 Maypm16 2016, 19:40:56

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132