美文网首页
AndroidX 使用Glide和Palette获取图片的主色调

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

作者: 如沙雨下 | 来源:发表于2019-10-25 11:37 被阅读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());
                   }
                }
            });
    
        }
    
    }
    

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

    相关文章

      网友评论

          本文标题:AndroidX 使用Glide和Palette获取图片的主色调

          本文链接:https://www.haomeiwen.com/subject/hbksvctx.html