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():  //標題文本的顏色
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章