Android调色板Palette的应用

通过 Palette 对象访问图片中的主要颜色以及叠加文本的相应颜色,并根据给定源图片动态更改应用的配色方案。就是通过调色板获取特定的颜色,然后就可以拿着这些颜色去做相应的应用设计,如图片滑动时,应用的导航栏和系统状态栏,跟着变色等等:

大概的使用方式:


public class MainActivity extends AppCompatActivity {

    private ImageView mIV;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mIV = findViewById(R.id.after);

    }

    public void onChange(View view){

        Palette.Builder builder = Palette.from(BitmapFactory.decodeResource(getResources(), R.mipmap.sunset));
        builder.generate(new Palette.PaletteAsyncListener() {
            @Override
            public void onGenerated(Palette palette) {

//                Palette.Swatch swatch = palette.getVibrantSwatch();  //充满活力的色调
//                Palette.Swatch swatch = palette.getLightVibrantSwatch();  //充满活力的亮色调
//                Palette.Swatch swatch = palette.getDarkVibrantSwatch();  //充满活力的暗色调

//                Palette.Swatch swatch = palette.getMutedSwatch();  //柔和的色调
//                Palette.Swatch swatch = palette.getLightMutedSwatch();  //柔和的亮色调
//                Palette.Swatch swatch = palette.getDarkMutedSwatch();  //柔和的暗色调
//
                int color;
                Palette.Swatch swatch = palette.getDominantSwatch();
                if (swatch == null) {
                    color = palette.getDominantColor(getResources().getColor(R.color.colorPrimary));  //如果提取不到颜色样本,就使用默认颜色
                } else {
                    color = swatch.getRgb();   //如何提取到颜色样本,就从颜色样本中获得颜色
                }
                int darkColor = colorBurn(color);  //对颜色进行处理,使颜色更深
                changeThemeColor(color, darkColor);  //切换主题颜色
            }
        });
    }

    //获得更深的颜色
    private int colorBurn(int color) {
        int alpha = color >> 24;
        int red = color >> 16 & 0xFF;
        int green = color >> 8 & 0xFF;
        int blue = color & 0xFF;
        red = (int) Math.floor(red * (1 - 0.1));
        green = (int) Math.floor(green * (1 - 0.1));
        blue = (int) Math.floor(blue * (1 - 0.1));
        return Color.rgb(red, green, blue);
    }
    private void changeThemeColor(int color,int darkColor){
        if (android.os.Build.VERSION.SDK_INT >= 21) {
            Window window = getWindow();
            window.setStatusBarColor(colorBurn(darkColor));  //设置系统栏颜色
            window.setNavigationBarColor(colorBurn(darkColor));  //设置底部NavigationBar颜色
        }
    }
}

swatch 除了getRgb()方法获取 RGB 颜色之外,还有其他获取颜色的方法:

swatch.getPopulation():  //像素的数量
swatch.getRgb():  //RGB颜色
swatch.getHsl():  //HSL颜色
swatch.getBodyTextColor():  //用于内容正文文本的颜色
swatch.getTitleTextColor():  //标题文本的颜色

你可能感兴趣的:(Android开发,移动开发,android,安卓)