AndroidX 使用Glide和Palette获取图片的主色调

2019-10-25  本文已影响0人  如沙雨下

最近公司的项目升级到了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());
               }
            }
        });

    }

}

代码比较简单,如果看完觉得有帮到你的话,希望能点个赞~

上一篇下一篇

猜你喜欢

热点阅读