AndroidPalette是Android平台上的一個強大的調色板庫,可以用於根據圖片的主色調自動生成顏色主題,極大地簡化了顏色設計的過程。本文將從多個方面對AndroidPalette進行詳細的闡述,包括使用示例、色彩分析原理、自定義配置等內容。
一、使用示例
AndroidPalette的使用非常簡單,只需要在項目的build.gradle文件中添加以下依賴:
dependencies {
implementation 'com.android.support:palette-v7:xx.x.x'
}
1、基本用法
下面我們通過一個簡單的實例來說明如何使用AndroidPalette。
首先,我們需要在布局文件中添加一個ImageView用於顯示圖片。例如:
<ImageView
android:id="@+id/image_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop" />
接著,在Activity的onCreate()方法中調用以下代碼:
final ImageView imageView = findViewById(R.id.image_view);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
imageView.setTransitionName("transition_name");
}
final Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.sample_image);
Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
Palette.Swatch vibrant = palette.getVibrantSwatch();
if (vibrant != null) {
imageView.setBackgroundColor(vibrant.getRgb());
getWindow().setStatusBarColor(vibrant.getRgb());
} else {
Toast.makeText(MainActivity.this, "Could not generate vibrant color!", Toast.LENGTH_SHORT).show();
}
}
});
上述代碼中,我們首先從資源中獲取一張圖片,然後用Palette.from()方法創建一個Palette對象,生成調色板。我們通過getVibrantSwatch()方法來獲取圖片中最顯眼的、極具視覺衝擊的顏色值,然後將該顏色值設置為ImageView的背景顏色和狀態欄顏色。
2、常用方法
除了使用getVibrantSwatch()方法獲取最顯眼的顏色之外,Palette類還提供了許多其他有用的方法。
1)getVibrantSwatch() / getDarkVibrantSwatch() / getLightVibrantSwatch()
分別返回圖片中最顯眼的有活力的顏色、最顯眼的暗淡的有活力的顏色和最顯眼的亮麗的有活力的顏色。
2)getMutedSwatch() / getDarkMutedSwatch() / getLightMutedSwatch()
分別返回圖片中最暗淡的、最暗淡的有活力的顏色和最亮麗的有活力的顏色。
3)getDominantSwatch()
返回圖片中最佔據主導地位的顏色。
4)getSwatches()
返回一個包含所有顏色樣本集合的List。
3、自定義樣本屬性
AndroidPalette還提供了自定義樣本屬性的方法,例如從調色板中提取特定的顏色屬性,比如主色調、輔助色調、背景顏色、標題顏色等等。
下面我們通過一個自定義的例子來說明如何提取特定的顏色屬性。
首先,我們在build.gradle文件中添加以下依賴:
dependencies {
implementation 'com.android.support:palette-v7:xx.x.x'
}
接著,我們創建一個CustomPalette類繼承自Palette,重載其中的onGenerated()方法,並在其中提取我們需要的顏色屬性。例如:
public class CustomPalette extends Palette {
private final List swatches = new ArrayList();
public CustomPalette(Palette.Builder builder) {
super(builder);
}
@Override
public void onGenerated(Palette palette) {
swatches.clear();
List list = new ArrayList();
list.add(palette.getVibrantSwatch());
list.add(palette.getDarkVibrantSwatch());
list.add(palette.getLightVibrantSwatch());
list.add(palette.getMutedSwatch());
list.add(palette.getDarkMutedSwatch());
list.add(palette.getLightMutedSwatch());
for (Palette.Swatch swatch : list) {
if (swatch != null) {
PaletteSwatch ps = new PaletteSwatch();
ps.rgb = swatch.getRgb();
ps.titleTextColor = swatch.getTitleTextColor();
ps.bodyTextColor = swatch.getBodyTextColor();
swatches.add(ps);
}
}
}
public List getSwatches() {
return swatches;
}
public class PaletteSwatch {
public int rgb;
public int titleTextColor;
public int bodyTextColor;
}
}
在上述代碼中,我們在onGenerated()方法中提取了圖片中的五種顏色屬性,並將其保存在List中,以便後續使用。
接著我們在Activity中創建一個CustomPalette對象,使用我們剛才自定義的方法獲取各種顏色屬性。例如:
final ImageView imageView = findViewById(R.id.image_view);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
imageView.setTransitionName("transition_name");
}
final Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.sample_image);
CustomPalette.from(bitmap).generate(new CustomPalette.PaletteAsyncListener() {
@Override
public void onGenerated(CustomPalette palette) {
List swatches = palette.getSwatches();
if (swatches != null && !swatches.isEmpty()) {
CustomPalette.PaletteSwatch p1 = swatches.get(0);
CustomPalette.PaletteSwatch p2 = swatches.get(1);
CustomPalette.PaletteSwatch p3 = swatches.get(2);
CustomPalette.PaletteSwatch p4 = swatches.get(3);
CustomPalette.PaletteSwatch p5 = swatches.get(4);
CustomPalette.PaletteSwatch p6 = swatches.get(5);
// do something with the swatches
} else {
Toast.makeText(MainActivity.this, "Could not generate custom palette!", Toast.LENGTH_SHORT).show();
}
}
});
上述代碼中,我們首先創建了一個CustomPalette對象,生成調色板。然後使用我們剛才自定義的方法getSwatches()獲取各種顏色屬性,即可輕鬆地提取圖片中我們需要的各種顏色屬性。
二、色彩分析原理
AndroidPalette是如何實現自動色彩分析的呢?
它基於Android平台上提供的Palette API,Palette API是在Android 5.0(API level 21)中引入的一個新特性,它可以在圖片中提取出有用的色彩信息。Palette從圖片中提取出一組調色板並掃描圖片中的像素,提取出顏色合集。Palette會分析這些顏色,並且計算出每一個顏色的色相、飽和度和亮度值(HSL值)。Palette還會在顏色之間建立一些關係,並將其歸類到一些色彩類型,例如亮麗、暗淡、有活力的顏色等等。
下面是Palette API的一些核心類和方法。
1、Palette類
Palette類表示一個調色板對象,可以通過它獲取顏色集合以及各種顏色屬性。主要方法有:
- from(Bitmap bitmap):從點陣圖獲取一個新的Palette對象。
- from(Bitmap bitmap, int numColors):從點陣圖獲取一個新的Palette對象,並指定顏色數。
- from(Bitmap bitmap, int numColors, int maximumColorCount):從點陣圖獲取一個新的Palette對象,並指定顏色數及最大顏色數。
- generate():生成調色板。
2、Palette.Swatch類
Palette.Swatch類表示調色板中的一個顏色樣本,主要方法有:
- getRgb():獲取RGB顏色。
- getHsl():獲取HSL顏色。
- getPopulation():獲取該顏色在圖片中所佔比例。
- getTitleTextColor():獲取該顏色作為標題時的文本顏色。
- getBodyTextColor():獲取該顏色作為正文時的文本顏色。
3、Palette.Builder類
Palette.Builder類用於創建Palette對象,可以通過以下方法設置生成調色板時的一些參數。主要方法有:
- maximumColorCount(int count):設置最大顏色數量。
- resizeBitmapSize(int size):設置調整點陣圖大小。
- setRegion(int left, int top, int right, int bottom):設置顏色抽樣區域。
三、自定義配置
AndroidPalette還提供了自定義配置的方法,我們可以通過自定義配置來控制調色板的生成過程。
1、自定義顏色數量
我們可以通過Palette.Builder.maximumColorCount()方法來設置調色板中允許的最大顏色數量,從而影響調色板的生成。
Palette.from(bitmap).maximumColorCount(16).generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
// Use the generated palette
}
});
2、自定義著重顏色
我們可以通過Palette.Builder.setTargetColor()方法來設置調色板的著重顏色,該顏色將會被儘可能多地使用到調色板的生成過程中。
Palette.from(bitmap).setTargetColor(Color.RED).generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
// Use the generated palette
}
});
3、自定義顏色抽樣區域
我們可以通過Palette.Builder.setRegion()方法來設置顏色抽樣區域,該方法接受四個參數left、top、right、bottom,分別表示顏色抽樣的左上角、右下角的坐標。
Palette.from(bitmap).setRegion(50, 50, 100, 100).generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
// Use the generated palette
}
});
總結
AndroidPalette是一個非常有用而且強大的調色板庫,可以讓設計師和開發人員輕鬆地將圖片的顏色提取出來,並用於界面設計、字體顏色、狀態欄顏色等等。本文詳細介紹了AndroidPalette的使用方法、色彩分析原理以及自定義配置等內容,希望能對大家有所幫助。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/279535.html