一、Palette的簡介
Android 5.0 Lollipop開始,Google推出了一個叫做Palette的類庫,用於從一張圖片中提取出關鍵顏色來進行主題的設置或者自適應顏色的選擇,幫助應用實現更加美觀的用戶界面。
Palette使用起來非常簡單,我們只需要把想要提取顏色的圖片加載出來,然後調用Palette的API即可。Palette提供了一個Palette.Builder類來幫助我們快速創建一個Palette對象,然後設置要提取的顏色數量、默認顏色值、圖片要提取顏色的區域等。在Palette對象創建完成後,我們就可以通過它提供的方法獲取到每個顏色的主題和亮度值等等,用於進行應用界面主題的設計。
二、Palette的用法
首先,我們需要添加依賴庫:
<dependency>
<groupId>com.android.support</groupId>
<artifactId>palette-v7</artifactId>
<version>27.1.1</version>
</dependency>
接下來,我們就可以在代碼中使用Palette庫了,我們以ImageView為例:
ImageView imageView = findViewById(R.id.image_view);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.test_image);
Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(@Nullable Palette palette) {
if (palette != null) {
Palette.Swatch swatch = palette.getVibrantSwatch();
if (swatch != null) {
// 通過調用swatch的getRgb()方法獲取到顏色值,設置給界面元素即可
textView.setTextColor(swatch.getRgb());
...
}
}
}
});
上述代碼做了如下事情:
- 加載圖片資源。
- 通過Palette庫獲取到圖片中的主題釋放,包括亮色、暗色等等,提取的關鍵顏色數量可以通過生成Palette對象時的Palette.Builder來設置。
- 選擇其中一種顏色餵給應用界面元素,比如TextView等等。
三、實戰應用
下面我們通過一個簡單的案例來演示如何通過Palette來為應用提供合適的主題色。
首先,我們需要根據用戶上傳的頭像,對應界面元素的顏色進行搭配,實現界面的統一和諧。代碼如下:
public void updateUIWithAvatar(String avatarUrl) {
Glide.with(this).load(avatarUrl).into(photoView);
Glide.with(this).load(avatarUrl).asBitmap().into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
Palette.from(resource).generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
Palette.Swatch swatch = palette.getMutedSwatch();
if (swatch != null) {
toolbar.setBackgroundColor(swatch.getRgb());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getWindow().setStatusBarColor(swatch.getRgb());
}
}
}
});
}
});
}
上述代碼實現了以下功能:
- 使用Glide來加載頭像圖片。
- 通過Bitmap轉換為Palette所需的資源對象。
- 生成一個Palette對象,獲取到頭像圖片中顏色主題。
- 將獲取到的顏色值設置到界面元素上。
我們也可以通過獲取到Palette對象後的官方API獲取到更多的顏色信息,然後對應反映到應用界面上,實現更加優美的設計效果。
四、總結
Palette庫為我們提供了一個非常方便的方式來獲取圖片資源中的顏色主題,以及色彩的靈活搭配能力。在實際開發中,Palette可以應用到多個場景,包括圖片背景、按鈕顏色、文本樣式等等,通過設置不同的顏色主題來實現應用主題的變化,從而提升應用界面的美觀和用戶體驗。
原創文章,作者:MABM,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/137559.html