Мы с партнером хотим придать динамический цвет значку в нашем приложении для Android (изображение png с прозрачным фоном) аналогично маске webkit в CSS:
<div style="background-color: #34daa1; width: 60px; height: 60px; -webkit-mask-image: url('http://i.stack.imgur.com/gZvK4.png');"></div>
Мы думаем, что это было бы намного лучше, чем добавлять изображение для каждого цвета ... :( Возможно ли?
Большое спасибо...
2 ответа
Применение цветов к изображениям может быть немного сложным, поскольку платформа будет пытаться быть эффективной для вас. Когда вы добавляете несколько изображений с одним и тем же ресурсом, платформа будет содержать только одну ссылку на изображение и указывать на него несколько представлений. Это может быть проблематично в таких случаях, как ListViews, где у вас может быть кнопка изображения, которая включена или отображается серым цветом в зависимости от некоторых данных в элементе адаптера. Если у вас есть представление с десятью копиями одного и того же изображения, и вы изменяете изображение, все десять являются изменениями, поскольку они ссылаются на один и тот же ресурс под обложками. Чтобы бороться с этим, вы при необходимости мутируете Drawable, чтобы гарантировать получение чистой копии.
Вот хорошая статья на эту тему от Ромена Гая из Google.
http://www.curious-creature.org/2009/05/02/drawable-mutations/
Кроме того, вот пример того, как я использую мутации для применения цветовых фильтров поверх изображений.
/**
* Applies a specified color filter to a Drawable.
*
* @param drawable drawable to filter.
* @param color color to apply.
* @return a mutated Drawable.
*/
private static Drawable applyColorFilter(Drawable drawable, int color) {
Drawable mutate = drawable.mutate();
mutate.setColorFilter(color, PorterDuff.Mode.SRC_IN);
return mutate;
}
Итак, чтобы применить фильтр оттенков серого, вы должны сделать что-то вроде этого:
/**
* Applies a color filter to a Drawable.
*
* @return a mutated version of the given drawable with a color filter
* applied.
*/
public static Drawable convertToGrayScale(Drawable drawable) {
if (drawable == null) {
return null;
}
return applyColorFilter(drawable, Color.LTGRAY);
}
Попробуй это :
ImageView img = (ImageView) findViewById(R.id.img);
img.setBackgroundColor(R.color.gray);
Вам нужна картинка с прозрачным фоном.
ИЗМЕНИТЬ
Виноват. Попробуй это
Bitmap bm = BitmapFactory.decodeResource(getResources(), drawableId)
.copy(Bitmap.Config.ARGB_8888, true);
Paint paint = new Paint();
paint.setStyle(Style.FILL);
Canvas canvas = new Canvas();
canvas.drawColor(R.color.gray);
canvas.drawBitmap(bm, left, top, paint);
BitmapDrawable picture = new BitmapDrawable(getResources(), bm);
Похожие вопросы
Новые вопросы
android
Android — это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфонов, планшетов, автомобилей, телевизоров, одежды, очков, IoT). Для тем, связанных с Android, используйте теги, специфичные для Android, такие как android-intent, android-activity, android-adapter и т. д. Для вопросов, отличных от разработки или программирования, но связанных с Android framework, используйте эту ссылку: https://android .stackexchange.com.