银行卡列表之背景颜色自动识别

目前市场是的大部分App, 都具有个人账户功能吧, 那么当然少不了银行卡这个角色. 银行卡列表背景色若设置成统一的单色调, 那多影响美观. 若我们能把银行logo的主色调当成背景, 那逼格瞬间提升百倍呀!

首先我们要读取logo的主色调, 当然得拿到logo. 这里用到了github上的这位大兄弟抓取的数据, https://github.com/digglife/cnbankcard

那logo不可能全部都放到assets中, 多影响app体积. 个人建议放服务器.

说这么多, 先看看效果图吧.

读取主色调,我这里用到了Palette, Palette其实就是调色板, 能够读取图片的色调, 包含柔和深色的、柔和的明亮、活跃的明亮、活跃的深色…

步骤

导入

你需要在工程下的build.gradle里添加依赖才可以使用Palette,像如下代码所示:

1
2
3
dependencies {
compile 'com.android.support:palette-v7:27.1.1'
}

一些api

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
传入默认颜色防止Palette无法解析到指定颜色种类
// 获取到柔和的深色的颜色(可传默认值)
palette.getDarkMutedColor(Color.BLUE);
// 获取到活跃的深色的颜色(可传默认值)
palette.getDarkVibrantColor(Color.BLUE);
// 获取到柔和的明亮的颜色(可传默认值)
palette.getLightMutedColor(Color.BLUE);
// 获取到活跃的明亮的颜色(可传默认值)
palette.getLightVibrantColor(Color.BLUE);
// 获取图片中最活跃的颜色(也可以说整个图片出现最多的颜色)(可传默认值)
palette.getVibrantColor(Color.BLUE);
// 获取图片中一个最柔和的颜色(可传默认值)
palette.getMutedColor(Color.BLUE);
// ... 这里省略其他的方法。

开始使用

这里我们读取主色调, 什么明亮,柔和的怎么都不是想要的, 所以我这里就取像素点最多的那个色值,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/**
* 获取图片主色调
*
* @param bitmap
* @return
*/
public static void getBitmapColor(final Bitmap bitmap, final onBitmapGetColorListener listener) {
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;
}
}
}
if (maxSwatch != null)
listener.getColor(maxSwatch.getRgb());
}
});
}

那么到此颜色值获取了,直接设置背景就好了.

其他

Palatte还可以和ViewGroup和Fragment搭配使用, 也是非常美观的, 盗个图片

Title - Artist
0:00