Intereting Posts
Иконки ActionBar, имеющие разные размеры Построение WifiConfiguration из ScanResult или: Интерпретация возможностей «ScanResult» String Как поймать событие возвращения к активности после удара Лучше использовать FragmentActivity (или ActionBarActivity) или системную активность при настройке min API 14 (ICS)? Вложенное scrollview + recyclerview, странное поведение autoscroll Использование adb logcat с реальным телефоном (а не с эмулятором) Стиль списка ListView – выравнивание по левому краю текста и выравнивание по правому краю Размер установки приложения одинаковый для разных типов устройств Ошибка компиляции при использовании JsonObjectRequest Как запустить службу Android при установке Ограничение API Google Directions Android NDK: что я должен установить в Application.mk для APP_ABI? Android 5.0 Datepicker в scrollview не работает (без прокрутки месяцев) Ориентация на конкретную версию системного образа с помощью утилиты командной строки «android»? Переход активности: выполнение остановки активности, которая не возобновляется

Android: простой способ изменить цвет png-файла

Я пишу игру с базовым спрайтом (шар) – в настоящее время у меня есть два разных PNG-файла цветного шара, которые я создал, мне нужно создать больше (возможно, еще 5 или около того) и не хочу иметь 7 различных png-файлов. (Это было бы 20 дополнительных файлов, поскольку у меня есть 4 разных размера для масштабирования). Я предпочел бы придерживаться 1 – те, которые у меня есть на данный момент, являются желтыми и красными (почти сплошные, но не совсем – у них есть детали на них).

Вопрос. Есть ли простой способ изменить цвет моих существующих файлов PNG? Я видел, как люди упоминают setColor и setColorFilter но я не могу понять, как их использовать. Также будут ли они работать с файлами PNG, которые уже имеют цвет или работают только с белыми файлами PNG (я не думаю, что мои PNG могут быть просто белыми)?

Спасибо всем, что любая помощь будет оценена.

Solutions Collecting From Web of "Android: простой способ изменить цвет png-файла"

Вы можете попытаться определить пользовательскую ColorMatrix со случайными значениями rgb:

 Random rand = new Random(); int r = rand.nextInt(256); int g = rand.nextInt(256); int b = rand.nextInt(256); ColorMatrix cm = new ColorMatrix(); cm.set(new float[] { 1, 0, 0, 0, r, 0, 1, 0, 0, g, 0, 0, 1, 0, b, 0, 0, 0, 1, 0 }); // last line is antialias paint.setColorFilter(new ColorMatrixColorFilter(cm)); canvas.drawBitmap(myBitmap, toX, toY, paint); 

Я надеюсь, что это помогает.

Вы можете использовать только черный PNG-файл для создания разных цветовых оттенков.

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

 protected BitmapDrawable setIconColor(int color) { if (color == 0) { color = 0xffffffff; } final Resources res = getResources(); Drawable maskDrawable = res.getDrawable(R.drawable.actionbar_icon_mask); if (!(maskDrawable instanceof BitmapDrawable)) { return; } Bitmap maskBitmap = ((BitmapDrawable) maskDrawable).getBitmap(); final int width = maskBitmap.getWidth(); final int height = maskBitmap.getHeight(); Bitmap outBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(outBitmap); canvas.drawBitmap(maskBitmap, 0, 0, null); Paint maskedPaint = new Paint(); maskedPaint.setColor(color); maskedPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP)); canvas.drawRect(0, 0, width, height, maskedPaint); BitmapDrawable outDrawable = new BitmapDrawable(res, outBitmap); return outDrawable; }