Intereting Posts
Android-карта Google Map InfoWindow после поворота маркера Где код, вызываемый при вызове getApplicationContext ()? Как закончить () нажатие кнопки «Активность на дому» в андроиде? Перетащите для динамического изменения пары смежных макетов на Android Значок значка Android в FloatingActionButton Как сделать вращающееся меню Как создать эффект пульсации для предварительного леденца Не удалось применить патч при обновлении студии Android Имеет ли значение, если я пишу «INTEGER» или «int» в sql-команде внутри java? Внедрить безопасность на уровне подписки на услуги Android с более чем одной разрешенной подписью Android: проблема с отладкой javascript в webview Можно ли заменить по умолчанию «Force Close» диалоговое окно в Android? Удалить ссылку перехода между действиями в инструменте Редактор навигации в Android Studio Не удалось скомпилировать NME для Android Android 4.2.2 трансляция входящих звонков

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; }