android Palette調(diào)色板使用詳解
Palette是一個可以從圖片(Bitmap)中提取顏色的幫助類,可以使UI更加美觀,根據(jù)圖片動態(tài)的顯示相應的顏色?,F(xiàn)在最新的api是在版本22.0.0添加的,本篇文章也是使用的22.0.0的api版本(注意版本之間api的不同)。

應用項目:https://github.com/DingMouRen/PaletteImageView
應用中的效果 Demo 效果

Palette可以提取的顏色:
- Vibrant (有活力的)
- Vibrant dark(有活力的 暗色)
- Vibrant light(有活力的 亮色)
- Muted (柔和的)
- Muted dark(柔和的 暗色)
- Muted light(柔和的 亮色)
使用方法: module的build.gradle中引用
compile 'com.android.support:palette-v7:25.3.1'
使用步驟:
1.獲取Palette對象,也就是圖像調(diào)色板
2.獲取從圖像調(diào)色板生成的色樣
3.從色樣中提取相應顏色
1.獲取Palette對象,也就是圖像調(diào)色板
獲取Palette對象有同步和異步兩種方式,建議使用異步獲取Palette對象
// Synchronous
Palette p = Palette.from(bitmap).generate();
// Asynchronous
Palette.from(bitmap).generate(new PaletteAsyncListener() {
public void onGenerated(Palette p) {
// Use generated instance
}
});
2.獲取從圖像調(diào)色板生成的色樣
可以獲取到六種色樣,但是有的時候獲取不到對應的色樣對象,必須注意非空判斷。
Palette.Swatch vibrant = palette.getVibrantSwatch();//有活力的 Palette.Swatch vibrantDark = palette.getDarkVibrantSwatch();//有活力的,暗色 Palette.Swatch vibrantLight = palette.getLightVibrantSwatch();//有活力的,亮色 Palette.Swatch muted = palette.getMutedSwatch();//柔和的 Palette.Swatch mutedDark = palette.getDarkMutedSwatch();//柔和的,暗色 Palette.Swatch mutedLight = palette.getLightMutedSwatch();//柔和的,亮色
3.從色樣中提取相應顏色
通過 getRgb() 可以得到最終的顏色值并應用到UI中。getBodyTextColor() 和 getTitleTextColor() 可以得到此顏色下文字適合的顏色,這樣很方便我們設置文字的顏色,使文字看起來更加舒服。
swatch.getPopulation(): 樣本中的像素數(shù)量 swatch.getRgb(): 顏色的RBG值 swatch.getHsl(): 顏色的HSL值 swatch.getBodyTextColor(): 主體文字的顏色值 swatch.getTitleTextColor(): 標題文字的顏色值
Demo的代碼中沒有對獲取到的色樣對象進行非空判斷,注意一定要加上非空判斷
public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getName();
private LinearLayout line1,line2,line3,line4,line5,line6;
private TextView tv1_1,tv1_2,tv2_1,tv2_2,tv3_1,tv3_2,tv4_1,tv4_2,tv5_1,tv5_2,tv6_1,tv6_2;
private List<LinearLayout> bgs = new ArrayList<>();
private List<TextView> bodyTexts = new ArrayList<>();
private List<TextView> titleTexts = new ArrayList<>();
private List<Palette.Swatch> swatchs = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView img = (ImageView) findViewById(R.id.img);
initView();
Bitmap bitmap = ((BitmapDrawable)img.getDrawable()).getBitmap();
if (bitmap == null){
return;
}
Palette.from(bitmap).generate(listener);
}
private Palette.PaletteAsyncListener listener = new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
if (palette != null){
Palette.Swatch vibrant = palette.getVibrantSwatch();//有活力的
Palette.Swatch vibrantDark = palette.getDarkVibrantSwatch();//有活力的,暗色
Palette.Swatch vibrantLight = palette.getLightVibrantSwatch();//有活力的,亮色
Palette.Swatch muted = palette.getMutedSwatch();//柔和的
Palette.Swatch mutedDark = palette.getDarkMutedSwatch();//柔和的,暗色
Palette.Swatch mutedLight = palette.getLightMutedSwatch();//柔和的,亮色
swatchs.clear();
swatchs.add(vibrant);swatchs.add(vibrantDark);swatchs.add(vibrantLight);
swatchs.add(muted);swatchs.add(mutedDark);swatchs.add(mutedLight);
show();
}
}
};
private void show() {
for (int i = 0; i < 6; i++) {
bgs.get(i).setBackgroundColor(swatchs.get(i).getRgb());
bodyTexts.get(i).setTextColor(swatchs.get(i).getBodyTextColor());
titleTexts.get(i).setTextColor(swatchs.get(i).getTitleTextColor());
}
}
private void initView() {
line1 = (LinearLayout) findViewById(R.id.line1);
line2 = (LinearLayout) findViewById(R.id.line2);
line3 = (LinearLayout) findViewById(R.id.line3);
line4 = (LinearLayout) findViewById(R.id.line4);
line5 = (LinearLayout) findViewById(R.id.line5);
line6 = (LinearLayout) findViewById(R.id.line6);
bgs.clear();
bgs.add(line1);bgs.add(line2);bgs.add(line3);bgs.add(line4);bgs.add(line5);bgs.add(line6);
tv1_1 = (TextView) findViewById(R.id.tv1_1);
tv2_1 = (TextView) findViewById(R.id.tv2_1);
tv3_1 = (TextView) findViewById(R.id.tv3_1);
tv4_1 = (TextView) findViewById(R.id.tv4_1);
tv5_1 = (TextView) findViewById(R.id.tv5_1);
tv6_1 = (TextView) findViewById(R.id.tv6_1);
tv1_2 = (TextView) findViewById(R.id.tv1_2);
tv2_2 = (TextView) findViewById(R.id.tv2_2);
tv3_2 = (TextView) findViewById(R.id.tv3_2);
tv4_2 = (TextView) findViewById(R.id.tv4_2);
tv5_2 = (TextView) findViewById(R.id.tv5_2);
tv6_2 = (TextView) findViewById(R.id.tv6_2);
bodyTexts.clear();titleTexts.clear();
bodyTexts.add(tv1_1);bodyTexts.add(tv2_1);bodyTexts.add(tv3_1);bodyTexts.add(tv4_1);bodyTexts.add(tv5_1);bodyTexts.add(tv6_1);
titleTexts.add(tv1_2);titleTexts.add(tv2_2);titleTexts.add(tv3_2);titleTexts.add(tv4_2);titleTexts.add(tv5_2);titleTexts.add(tv6_2);
}
}
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- Android基礎(chǔ)之使用Fragment控制切換多個頁面
- android TextView設置中文字體加粗實現(xiàn)方法
- Android應用開發(fā)SharedPreferences存儲數(shù)據(jù)的使用方法
- Android 動畫之TranslateAnimation應用詳解
- Android的Activity跳轉(zhuǎn)動畫各種效果整理
- android客戶端從服務器端獲取json數(shù)據(jù)并解析的實現(xiàn)代碼
- android Handler詳細使用方法實例
- android PopupWindow 和 Activity彈出窗口實現(xiàn)方式
- Android SQLite數(shù)據(jù)庫增刪改查操作的使用詳解
相關(guān)文章
自定義ListView實現(xiàn)拖拽ListItem項交換位置(附源碼)
本文要實現(xiàn)的是拖拽ListView的Item項,在布局方面還是用基于布局泵LayoutInflater來從不同的Layout模板拿到不同的布局然后將view返回,感興趣的朋友可以了解下哈2013-06-06
深入Android中BroadcastReceiver的兩種注冊方式(靜態(tài)和動態(tài))詳解
這篇文章主要介紹了深入Android中BroadcastReceiver的兩種注冊方式(靜態(tài)和動態(tài))詳解,具有一定的參考價值,有需要的可以了解一下。2016-12-12
Android編程之ActionBar Tabs用法實例分析
這篇文章主要介紹了Android編程之ActionBar Tabs用法,結(jié)合實例形式分析了ActionBar Tabs的功能及Tab切換不同的Fragment的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2017-03-03
android studio集成unity導出工程的實現(xiàn)
本文主要介紹了android studio集成unity導出工程的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-05-05
Android應用中圖片瀏覽時實現(xiàn)自動切換功能的方法詳解
這篇文章主要介紹了Android應用中圖片瀏覽時實現(xiàn)自動切換功能的方法,文中還講解了一個觸摸大圖進行圖片切換的深入功能,需要的朋友可以參考下2016-04-04

