最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android Support Palette使用詳解

 更新時間:2018年07月06日 09:06:50   作者:SilentKnight  
這篇文章主要介紹了Android Support Palette使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

使用Palette API選擇顏色

 良好的視覺設(shè)計是app成功所必不可少的, 而色彩設(shè)計體系是設(shè)計的基礎(chǔ)構(gòu)成. Palette包是支持包, 能夠從圖片中解析出突出的顏色, 從而幫助你創(chuàng)建出視覺迷人的應(yīng)用

你能夠使用Palette包設(shè)計布局主題, 并把自定義色彩應(yīng)用到可視化元素中. 比如, 你可以根據(jù)專輯封面, 用Palette創(chuàng)建為歌曲創(chuàng)建一個彩色標題卡片, 或者當應(yīng)用背景圖片發(fā)生改變時調(diào)整toolbar顏色. Palette對象給予你權(quán)限訪問Bitmap圖片里面的顏色, 同時也根據(jù)Bitmap提供了6個主要的顏色, 供你填寫設(shè)計選擇.

設(shè)置依賴

Palette為庫從版本Android Support Library 24.0.0引入, 可以在build.gradle中按照如下代碼添加Palette依賴:

android {
 compileSdkVersion 27
 ...
}

dependencies {
 ...
 implementation 'com.android.support:palette-v7:27.1.1'
}

創(chuàng)建Palette對象

Palette給予你權(quán)限訪問圖片中的基本顏色, 以及重疊文本對應(yīng)的顏色. 可以根據(jù)給定資源圖片, 使用palette設(shè)計應(yīng)用風格, 動態(tài)改變應(yīng)用的色彩體系.

要創(chuàng)建Palette, 首先在從Bitmap中實例化Palette.Builder. 然后在生成Palette之前, 可以使用Palette.Builder來自定義Palette.

生成Palette實例

首先, 利用Palette的from(Bitmap)方法從Bitmap中生成Palette.Builder. 之后利用這個Builder同步或者異步地生成Palette. 如果你想在generate()方法被調(diào)用的線程中創(chuàng)建Palette對象, 使用同步的palette生成. 如果你想在不同的線程上異步地生成Palette, 就要使用Palette.PaletteAsyncListener.onGenerated方法在Palette生成之后立即訪問它.

下面的代碼片斷展示了兩種不同的Palette生成方式:

// Generate palette synchronously and return it
public Palette createPaletteSync(Bitmap bitmap) {
 Palette p = Palette.from(bitmap).generate();
 return p;
}

// Generate palette asynchronously and use it on a different
// thread using onGenerated()
public void createPaletteAsync(Bitmap bitmap) {
 Palette.from(bitmap).generate(new PaletteAsyncListener() {
 public void onGenerated(Palette p) {
  // Use generated instance
 }
 });
}

如果你需要持續(xù)為多個有序圖片生成多個Palette, 考慮將Palette實例緩存起來, 以避免減緩UI性能. 你也不應(yīng)該在主線程中創(chuàng)建Palette.

自定義Palette

 Palette.Builder允許你自定義Palette, 通過從結(jié)果Palette中選擇多少種顏色, Builder使用圖片的什么區(qū)域生成Palette, Palette中允許什么顏色等. 比如, 你能夠過濾掉黑色, 或者, Builder只能夠使用圖片的上半部分生成Palette.

通過Palette.Builder中的下列方法, 可以微調(diào)Palette尺寸和顏色:

  1. addFilter(): 該方法添加了過濾器, 用以表明結(jié)果Palette中什么顏色是允許的. 傳入自己的Palette.Filter, 修改isAllowed()方法來決定Palette過濾哪些方法.
  2. maximumColorCount(): 該方法設(shè)置了Palette中最大的顏色數(shù)目. 默認值是16, 最優(yōu)值依賴于源圖. 對于風景圖, 最優(yōu)值處于8~16, 而肖像圖通常擁有16~24個值. 顏色越多, Palette.Builder生成Palette就需要花費超久的時間.
  3. setRegion(): 該方法指出了生成Palette時, Builder使用Bitmap的什么區(qū)域. 你只能使用這個方法從Bitmap中生成Palette, 而不會影響源圖.
  4. addTarget(): 該方法允許你通過向Builder添加Target色彩配置文件來執(zhí)行自己的顏色匹配. 如果默認的Target并不有效的話, 高級開發(fā)人員能夠使用Target.Builder創(chuàng)建自己的Target.

提取色彩配置文件

基于材料設(shè)計標準, Palette庫從圖片中提供常用的色彩配置文件. 每一個文件被一個Target定義, 從Bitmap圖片中提取的色彩基于飽和度, 亮度和分布(Bitmap中表示色彩的像素數(shù))對文件進行評分. 對于每一個文件, 具有最好分數(shù)的顏色定義了給定圖片的色彩配置文件.

默認情況下, 對于給定圖片, Palette對象包含16個基本顏色. 在生成Palette的時候, 你可以通過Palette.Builder自定義顏色數(shù). 提取更多的色彩對于每個色彩配置文件提供了更多的潛在匹配, 但也引起Palette.Builder花費更久的時間來生成Palette.

Palette庫嘗試提取以下6個色彩配置文件:

  1. Light Vibrant
  2. Vibrant
  3. Dark Vibrant
  4. Light Muted
  5. Muted
  6. Dark Muted

每一個Palette.get<Profile>Color()方法返回了Palette中的顏色, 而每一個Palette關(guān)聯(lián)了一個特定的配置文件, 其中, <Profile>被以上6個色彩配置文件名取代. 比如, 獲取Dark Vibrant色彩配置文件的方法是getDarkVibrantProfile(). 因為不是所有的圖片都會包含所有的色彩配置文件, 所以, 你必須也提供一個默認顏色返回.

使用樣本創(chuàng)建色彩體系

Palette對象也為每一個色彩配置文件生成 Palette.Swatch對象. Palette.Swatch對象包含對象的配置文件關(guān)聯(lián)的顏色和顏色的像素分布.

Swatch擁有額外的方法來訪問色彩配置文件更多的信息, 比如HSL值, 像素分布等. 你能夠通過使用getBodyTextColor()和getTitleTextColor()來生成更多繁雜的色彩體系和應(yīng)用主題. 這些方法返回的顏色恰好配合Swatch的顏色使用.

每一個Palette.get<Profile>Swatch()方法返回了關(guān)聯(lián)特定配置文件的Swatch. 盡管get<Profile>Swatch()方法并不默認值參數(shù), 如果圖片中并不存在特定的某個配置文件, 該方法會返回null. 由此, 你應(yīng)該在使用Swatch之前判斷它是否為空. 比如, 下面的代碼從Palette中獲取了標題文本顏色, 并檢查了Vibrant Swatch是否為空:

 Palette.Swatch vibrant = myPalette.getVibrantSwatch();
 if(vibrant != null){
  int titleColor = vibrant.getTitleTextColor();
  // ...
 }

要訪問Palette中的所有顏色, getSwatches()方法返回了包含圖片中生成的所有Swatch的列表, 包括標準的6個色彩配置文件.

下面的代碼片斷使用了上述代碼片斷, 同步生成了Palette, 獲取了Vibrant Swatch, 改變了Toolbar顏色, 以匹配Bitmap圖片. 下面的圖片則展示了結(jié)果和toolbar

// Set the background and text colors of a toolbar given a
// bitmap image to match
public void setToolbarColor(Bitmap bitmap) {
 // Generate the palette and get the vibrant swatch
 // See the createPaletteSync() method
 // from the code snippet above
 Palette p = createPaletteSync(bitmap);
 Palette.Swatch vibrantSwatch = p.getVibrantSwatch();

 Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

 // Load default colors
 int backgroundColor = ContextCompat.getColor(getContext(),
  R.color.default_title_background);
 int textColor = ContextCompat.getColor(getContext(),
  R.color.default_title_color);

 // Check that the Vibrant swatch is available
 if(vibrantSwatch != null){
  backgroundColor = vibrantSwatch.getRgb();
  textColor = vibrantSwatch.getTitleTextColor();
 }

 // Set the toolbar background and text colors
 toolbar.setBackgroundColor(backgroundColor);
  toolbar.setTitleTextColor(textColor);
}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android 如何收集已發(fā)布程序的崩潰信息

    Android 如何收集已發(fā)布程序的崩潰信息

    下面我就說說如何收集程序運行過程的異常信息。需要的朋友可以過來參考下
    2013-07-07
  • Android使用MobSDK短信驗證

    Android使用MobSDK短信驗證

    這篇文章主要為大家詳細介紹了Android使用MobSDK短信驗證,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Android的WebView與H5前端JS代碼交互的實例代碼

    Android的WebView與H5前端JS代碼交互的實例代碼

    本篇文章主要介紹了Android的WebView與H5前端JS代碼交互的實例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-07-07
  • Flutter系統(tǒng)網(wǎng)絡(luò)圖片加載流程解析

    Flutter系統(tǒng)網(wǎng)絡(luò)圖片加載流程解析

    這篇文章主要介紹了Flutter系統(tǒng)網(wǎng)絡(luò)圖片加載流程,從構(gòu)造函數(shù)開始說起,我們以最簡單的調(diào)用方式舉例,當我們使用Image.network(imageUrl)這種方式來顯示圖片時,Image組件內(nèi)部image屬性就會被賦值NetworkImage,具體操作步驟跟隨小編一起看看吧
    2022-05-05
  • 自定義滑動按鈕為例圖文剖析Android自定義View繪制

    自定義滑動按鈕為例圖文剖析Android自定義View繪制

    這篇文章主要介紹了自定義滑動按鈕的例子,圖文剖析Android自定義View繪制,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-03-03
  • Android實現(xiàn)錄音監(jiān)聽動畫的示例代碼

    Android實現(xiàn)錄音監(jiān)聽動畫的示例代碼

    在很多app種內(nèi)置了語音助手,也存在各種動畫,這篇文章主要為大家詳細介紹了Android實現(xiàn)錄音監(jiān)聽動畫的示例代碼,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-12-12
  • android通用xml解析方法

    android通用xml解析方法

    之前做的網(wǎng)絡(luò)相關(guān)的應(yīng)用,里面涉及到了xml的解析,由于急于完成任務(wù)也沒有設(shè)計就直接敲代碼。這幾天給一個朋友做項目的時候也涉及到了xml的解析,而且解析的內(nèi)容比較多,我查看了以前的項目中的相關(guān)代碼,頓時覺得很多代碼都是可以優(yōu)化的。在此寫兩個通用的xml解析方法,當然這里所講的通用只是在一定程度上并且需要遵守一些規(guī)范。
    2013-03-03
  • 詳解Android的自動化構(gòu)建及發(fā)布

    詳解Android的自動化構(gòu)建及發(fā)布

    本篇文章主要介紹了Android的自動化構(gòu)建及發(fā)布,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Android實現(xiàn)靜默安裝實例代碼

    Android實現(xiàn)靜默安裝實例代碼

    本篇文章主要介紹了Android實現(xiàn)靜默安裝實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • android獲取手機cpu并判斷是單核還是多核

    android獲取手機cpu并判斷是單核還是多核

    手機cpu是單核還是多核如何判斷,本例將會介紹android中獲取的方法,感興趣的你可不要錯過了哈
    2013-02-02

最新評論

周宁县| 广河县| 且末县| 高邑县| 盘锦市| 琼中| 墨玉县| 临夏市| 阳春市| 射阳县| 普定县| 靖安县| 淮安市| 长垣县| 门源| 三原县| 浦江县| 台江县| 噶尔县| 建瓯市| 华阴市| 深州市| 崇礼县| 宕昌县| 化隆| 江达县| 河间市| 商河县| 开阳县| 凌云县| 浏阳市| 湘潭市| 朝阳区| 曲松县| 广宁县| 泰顺县| 南投县| 喀什市| 鄂托克旗| 容城县| 万安县|