В Android 5.0 Lollipop был добавлен класс для извлечения полезных цветов из растрового изображения. Класс Палитра , найденный в android.support.v7.graphics, может извлекать следующие цвета:
- Яркий
- Яркий Темный
- Яркий свет
- приглушенный
- Приглушенный темнота
- Приглушенный свет
Эта обучающая страница Android содержит все детали, необходимые для использования класса (я сам попробовал это сделать в Android Studio, и это было очень просто): http://developer.android.com/training/material/drawables.html#ColorExtract
Цитировать:
Библиотека поддержки Android r21 и выше включает в себя Палитра
класс, который позволяет вам извлечь выдающиеся цвета из изображения. к
распакуйте эти цвета, передайте объект Bitmap в Palette.generate ()
статический метод в фоновом потоке, куда вы загружаете ваши изображения. Если
Вы не можете использовать этот поток, вызовите метод Palette.generateAsync () и
вместо этого предоставьте слушателя. *
Вы можете получить заметные цвета из изображения, используя геттер
методы в классе Palette, такие как Palette.getVibrantColor.
Чтобы использовать класс Palette в вашем проекте, добавьте следующий Gradle
зависимость от модуля вашего приложения:
dependencies {
...
implementation 'com.android.support:palette-v7:21.0.+'
}
Или, если вы используете androidx:
implementation 'androidx.palette:palette:1.0.0'
Если вам нужно использовать generateAsync (), вот как:
Palette.generateAsync(bitmap, new Palette.PaletteAsyncListener() {
public void onGenerated(Palette palette) {
// Do something with colors...
}
});
EDIT:
Поскольку вопрос состоит в том, как извлечь цвета из прорисовываемого ресурса, вам сначала нужно преобразовать прорисовку в растровое изображение, чтобы использовать описанную мной технику. К счастью, это довольно просто, используя BitmapFactory:
Bitmap icon = BitmapFactory.decodeResource(context.getResources(),
R.drawable.icon_resource);`