最近公司的项目升级到了AndroidX,项目里依赖的第三方库也同时升了一波版本号,Gilde升级到4.9.0后一些老的api都过时了,记录下获取主色调这个功能点的代码。
第一步
通过Glide获取Bitmap对象,升级后的api写法如下:
Glide.with(mContext)
.asBitmap()
.load(url)
.into(object : CustomTarget<Bitmap>() {
override fun onResourceReady(bitmap: Bitmap, transition: Transition<in Bitmap>?) {
PaletteHelper.setPaletteColor(bitmap, guild_title_bg)
}
override fun onLoadCleared(placeholder: Drawable?) {
// this is called when
// imageView is cleared on lifecycle call or for
// some other reason.
// if you are referencing the bitmap somewhere else too other than this imageView
// clear it here as you can no longer have the bitmap
}
})
glide帮我们处理好了子线程耗时操作
第二步
通过Palette类从Bitmap获取色调,新增依赖如下
implementation "androidx.palette:palette:1.0.0"
实现方法如下:
/**
* 主色调工具类
*/
public class PaletteHelper {
/**
* 设置图片主色调
*
* @param bitmap
* @return
*/
public static void setPaletteColor(Bitmap bitmap, final View view) {
if (bitmap == null) {
return;
}
Palette.from(bitmap).maximumColorCount(10).generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(@NonNull Palette palette) {
// List<Palette.Swatch> list = palette.getSwatches();
// int colorSize = 0;
// Palette.Swatch maxSwatch = null;
// for (int i = 0; i < list.size(); i++) {
// Palette.Swatch swatch = list.get(i);
// if (swatch != null) {
// int population = swatch.getPopulation();
// if (colorSize < population) {
// colorSize = population;
// maxSwatch = swatch;
// }
// }
// }
Palette.Swatch s = palette.getDominantSwatch();//独特的一种
Palette.Swatch s1 = palette.getVibrantSwatch(); //获取到充满活力的这种色调
Palette.Swatch s2 = palette.getDarkVibrantSwatch(); //获取充满活力的黑
Palette.Swatch s3 = palette.getLightVibrantSwatch(); //获取充满活力的亮
Palette.Swatch s4 = palette.getMutedSwatch(); //获取柔和的色调
Palette.Swatch s5 = palette.getDarkMutedSwatch(); //获取柔和的黑
Palette.Swatch s6 = palette.getLightMutedSwatch(); //获取柔和的亮
if (s1 != null) {
view.setBackgroundColor(s1.getRgb());
}
}
});
}
}
代码比较简单,如果看完觉得有帮到你的话,希望能点个赞~