前言
經(jīng)過這么多年的UI發(fā)展仅淑,對(duì)UI對(duì)變換能力要求越來越高,從擬物化到扁平化再到Android到Material Design 藐翎,UI越來越友好,豐富而簡約实幕。設(shè)計(jì)是藝術(shù)性的吝镣,也是需要技術(shù)做支撐的 ,更主要的是對(duì)用戶是友好的昆庇,在設(shè)計(jì)不同質(zhì)化的前提下末贾,要減少用戶的學(xué)習(xí)成本,盡量設(shè)計(jì)簡潔操作路徑流暢整吆,不為花哨而花哨拱撵,盡量符合自然。
在有模塊或分類呈現(xiàn)時(shí) 掂为,往往我們的設(shè)計(jì)都會(huì)在每個(gè)Item的底部加入圖片裕膀,作為豐富Item的背景圖或是表示模塊的意象圖 。在圖片上面勇哗,我們往往會(huì)有title和description昼扛,當(dāng)圖片顏色與文字顏色相沖時(shí),Item上當(dāng)字就會(huì)看不清楚欲诺,我們常用的做法是抄谐,在文字下方增加一個(gè)半透明的黑色背景 。在以前我們或許沒轍扰法,但現(xiàn)在蛹含,Google為我們提供了一個(gè)圖片但取色器,我們可以通過palette來獲取到ImageView中圖片的部分顏色值塞颁。
Palette 取色器
引入palette庫
compile 'com.android.support:palette-v7:26.0.0-alpha1'
獲取ImageView的BitMap
// 拿到ImageView的bitmap
BitmapDrawable bitmapDrawable = (BitmapDrawable) imageView.getDrawable();
Bitmap bitmap = bitmapDrawable.getBitmap();
使用Palette進(jìn)行取色
// 進(jìn)行bitmap色彩分析
Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
// 得到暗柔和的顏色
int darkMutedColor = palette.getDarkMutedColor(Color.MAGENTA);
// 暗 浦箱, 鮮艷
int darkVibrantColor = palette.getDarkVibrantColor(Color.RED);
// ...
// 色值取樣
// 暗色 柔和系
// Palette.Swatch darkMutedSwatch = palette.getDarkMutedSwatch();
// 亮色 柔和系取樣
Palette.Swatch lightMutedSwatch = palette.getLightMutedSwatch();
// 得到描述文本顏色取樣
int bodyTextColor = lightMutedSwatch.getBodyTextColor();
// 得到title文本顏色取樣
int titleTextColor = lightMutedSwatch.getTitleTextColor();
// 得到文本模塊背景色取樣
int rgb = lightMutedSwatch.getRgb();
// 通過取樣色值和透明度吸耿,得到顏色值并設(shè)置
linearLayout.setBackgroundColor(getTranslucentColor(0.5F,rgb));
desc.setTextColor(bodyTextColor);
title.setTextColor(titleTextColor);
linearLayout.setVisibility(View.VISIBLE);
}
});
/**
* 根據(jù)rgb顏色值進(jìn)行透明度計(jì)算
* @param percent
* @param rgb
* @return
*/
private int getTranslucentColor(float percent,int rgb) {
int red = Color.red(rgb);
int green = Color.green(rgb);
int blue = Color.blue(rgb);
int alpha = Color.alpha(rgb);
alpha = Math.round(percent * alpha);
return Color.argb(alpha,red,green,blue);
}
Palette類使用起來非常方便,所提供的選擇也比較多酷窥,可以獲取明暗光咽安,柔和,艷麗等多種組合蓬推,也可以使用取樣值 妆棒,Google推薦 ,內(nèi)部通過算法來進(jìn)行推倒沸伏,找到適合的色值來進(jìn)行組合糕珊。
palette.getDarkMutedColor(@ColorInt final int defaultColor); // 暗 ,柔和
palette.getDarkVibrantColor(@ColorInt final int defaultColor); // 暗 毅糟,艷麗
palette.getLightMutedColor(@ColorInt final int defaultColor) // 亮 红选,柔和
palette.getLightVibrantColor(@ColorInt final int defaultColor) // 亮 ,艷麗
palette.getMutedColor(@ColorInt final int defaultColor) // 柔和
palette.getVibrantColor(@ColorInt final int defaultColor) // 艷麗
結(jié)語
對(duì)于這些需要高深算法的庫姆另,在不是有特別需求都情況下纠脾,一般都不會(huì)研究他都源碼,只要會(huì)用就OK了蜕青,畢竟是做應(yīng)用苟蹈,每天總有寫不完的需求。