Android UI進階之旅7--Material Design之Palette
Palette
Palette是V7包裡面的調色盤,這個庫可以根據傳入的圖片,然後獲取一些指定條件的顏色。例如可以在一張圖片裡面分析出一些色彩特性:主色調、鮮豔的顏色、柔和顏色等等。
使用例子
下面是一個基本使用例如,其中Palette.generate已經過時不推薦使用。取而代之的是Palette.from方法,返回的是一個Builder物件,通過這個Builder物件我們可以指定圖片的分析範圍等等,最後在回撥中獲取相應的顏色即可。獲取到的顏色(可以設定透明度)可以設定給其他控制元件。
public class PaletteActivity extends AppCompatActivity {
private ImageView iv;
private TextView tv_title;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_palette);
iv = (ImageView) findViewById(R.id.iv);
tv_title = (TextView) findViewById(R.id.tv_title);
final TextView tv1 = (TextView) findViewById(R.id.tv1);
final TextView tv2 = (TextView) findViewById(R.id.tv2);
final TextView tv3 = (TextView) findViewById(R.id.tv3);
final TextView tv4 = (TextView) findViewById(R.id.tv4);
final TextView tv5 = (TextView) findViewById(R.id.tv5);
final TextView tv6 = (TextView) findViewById(R.id.tv6);
BitmapDrawable drawable = (BitmapDrawable) iv.getDrawable();
Bitmap bitmap = drawable.getBitmap();
//得到bitmap裡面的的一些色彩資訊---通過Palette類分析出來的
// Palette palette = Palette.generate(bitmap);
//非同步任務---可能分析的圖片會比較大或者顏色分佈比較複雜,會耗時比較久,防止卡死主執行緒。
Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
//暗、柔和的顏色
int darkMutedColor = palette.getDarkMutedColor(Color.BLUE);//如果分析不出來,則返回預設顏色
//暗、柔和
int lightMutedColor = palette.getLightMutedColor(Color.BLUE);
//暗、鮮豔
int darkVibrantColor = palette.getDarkVibrantColor(Color.BLUE);
//亮、鮮豔
int lightVibrantColor = palette.getLightVibrantColor(Color.BLUE);
//柔和
int mutedColor = palette.getMutedColor(Color.BLUE);
//柔和
int vibrantColor = palette.getVibrantColor(Color.BLUE);
//獲取某種特性顏色的樣品
// Swatch lightVibrantSwatch = palette.getLightVibrantSwatch();
Palette.Swatch lightVibrantSwatch = palette.getVibrantSwatch();
//谷歌推薦的:圖片的整體的顏色rgb的混合值---主色調
int rgb = lightVibrantSwatch.getRgb();
//谷歌推薦:圖片中間的文字顏色
int bodyTextColor = lightVibrantSwatch.getBodyTextColor();
//谷歌推薦:作為標題的顏色(有一定的和圖片的對比度的顏色值)
int titleTextColor = lightVibrantSwatch.getTitleTextColor();
//顏色向量
//float[] hsl = lightVibrantSwatch.getHsl();
//分析該顏色在圖片中所佔的畫素多少值
//int population = lightVibrantSwatch.getPopulation();
tv_title.setBackgroundColor(getTranslucentColor(0.6f, rgb));
tv_title.setTextColor(titleTextColor);
tv1.setBackgroundColor(darkMutedColor);
tv1.setText("darkMutedColor");
tv2.setBackgroundColor(lightMutedColor);
tv2.setText("lightMutedColor");
tv3.setBackgroundColor(darkVibrantColor);
tv3.setText("darkVibrantColor");
tv4.setBackgroundColor(lightVibrantColor);
tv4.setText("lightVibrantColor");
tv5.setBackgroundColor(mutedColor);
tv5.setText("mutedColor");
tv6.setBackgroundColor(vibrantColor);
tv6.setText("vibrantColor");
}
});
}
/**
* 設定顏色透明度
*/
protected int getTranslucentColor(float percent, int rgb) {
int blue = Color.blue(rgb);
int green = Color.green(rgb);
int red = Color.red(rgb);
int alpha = Color.alpha(rgb);
// int blue = rgb & 0xff;
// int green = rgb>>8 & 0xff;
// int red = rgb>>16 & 0xff;
// int alpha = rgb>>>24;
alpha = Math.round(alpha * percent);
Toast.makeText(this, "alpha:" + alpha + ",red:" + red + ",green:" + green, Toast.LENGTH_SHORT).show();
return Color.argb(alpha, red, green, blue);
}
}
getTranslucentColor是設定當前argb的顏色的透明度,API的主要思路是通過位移以及與操作來完成。
如果覺得我的文字對你有所幫助的話,歡迎關注我的公眾號:
我的群歡迎大家進來探討各種技術與非技術的話題,有興趣的朋友們加我私人微信huannan88,我拉你進群交(♂)流(♀)。
相關文章
- Android UI進階之旅7 Material Design之PaletteAndroidUIMaterial Design
- Android UI進階之旅2 Material Design之RecyclerView的使用AndroidUIMaterial DesignView
- Android UI進階之旅1 Material Design基本概念以及樣式AndroidUIMaterial Design
- Android初步進階之Design Support Library庫簡單使用(一)Android
- android Palette簡介Android
- UI 進階之拖拽排序的實現UI排序
- 前端進階的破冰之旅前端
- Android進階之旅:經典的大牛部落格推薦Android
- iOS UI 進階 (一)iOSUI
- 【Android進階】RecyclerView之ItemDecoration(一)AndroidView
- Android自我進階——JAVA之JVMAndroidJavaJVM
- flutter的進階之路之Material Design與IOS風格元件FlutterMaterial DesigniOS元件
- Android之Material DesignAndroidMaterial Design
- Android 探索之旅 | Material Design 學習資源AndroidMaterial Design
- 【Android進階】RecyclerView之快取(二)AndroidView快取
- JTalk《0325第四期-Android進階之旅》總結Android
- 我的Android進階之旅:經典的大牛部落格推薦Android
- iOS逆向之旅(進階篇) — 工具(LLDB)iOSLLDB
- iOS逆向之旅(進階篇) — HOOK(FishHook)iOSHook
- Android調色盤——Palette的使用Android
- Ant Design UI元件之Select踩坑UI元件
- Android 進階之旅 | JTalk 掘金線下活動第四期Android
- 【Android進階】RecyclerView之繪製流程(三)AndroidView
- Android進階2之WebView(瀏覽器)AndroidWebView瀏覽器
- Three.js 進階之旅:頁面平滑滾動-王國之淚 ?JS
- Flutter入門進階之旅(十三)Flutter 路由Flutter路由
- iOS逆向之旅(進階篇) — 程式碼注入iOS
- Android中Design庫之TabLayoutAndroidTabLayout
- Android複習之旅--子執行緒更新UIAndroid執行緒UI
- Android高階UI系列(2)-DecorViewAndroidUIView
- Flutter入門進階之旅(三)Text WidgetsFlutter
- iOS逆向之旅(進階篇) — 工具(class-dump)iOS
- iOS逆向之旅(進階篇) — HOOK(Logos)iOSHookGo
- 使用 Palette 讓你的 UI 色彩與內容更貼合UI
- Three.js 進階之旅:全景漫遊-高階版線上看房 ?JS
- Android動畫效果之Property Animation進階(屬性動畫)Android動畫
- Flutter入門進階之旅(十六)Scaffold 腳手架Flutter
- Flutter入門進階之旅(十四)ListView&GridViewFlutterView