Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 5.0 調色 Palette調色功能

Android 5.0 調色 Palette調色功能

編輯:關於Android編程

Palette非常好用,也非常好玩。 Palette的作用是從圖像中提取突出的顏色,這樣我們可以根據提取到的色值把它賦給Toolbar,標題,狀態欄等,可以使我們的整個界面色調統一,效果非常好看。

Palette介紹

Palette調色板,可以很方便的讓我們從圖片中提取顏色。並且可以指定提取某種類型的顏色。

  1. Vibrant鮮艷的
  2. Vibrantdark鮮艷的暗色
  3. Vibrantlight鮮艷的亮色
  4. Muted柔和的
  5. Muteddark柔和的暗色
  6. Mutedlight柔和的亮色

對圖片取色是一個比較消耗性能的操作,其內部會對圖片的像素值進來遍歷以分析對比,所以我們要在異步線程中去完成。

如果操作本來就屬於後台線程,可以使用:
Palette p = Palette.generate(Bitmap bitmap);
如果在主線程中,我們可以使用異步的方式:
Palette.generateAsync(bitmap, new Palette.PaletteAsyncListener() {
        public void onGenerated(Palette palette) { }
});

當操作完成後或者異步回調後,我們就可以使用以下方式來獲取對應的色值了,並且可以在沒有獲取到的情況下之指定默認值:

p.getVibrantColor(int defaultColor);
p.getDarkVibrantColor(int defaultColor);
p.getLightVibrantColor(int defaultColor);
p.getMutedColor(int defaultColor);
p.getDarkMutedColor(int defaultColor);
p.getLightMutedColor(int defaultColor);

在使用palette之前,bitmap提供獲取指定位置的像素值:

bitmap.getPixel(x,y)

但是該方式只能獲取某一點的像素值,palette是對整個bitmap的所有像素值進行分析,並選出幾個像素占比比較多的像素值,這樣選擇出來的色值更符合圖片的整體色值。

Palette簡單使用

Palette經常用於和ViewPager,Fragment搭配使用,當我們的Pager切換時伴隨著Fragment的變化,而Fragment裡的內容一般是不同的,所以每個Fragment裡的一般視覺效果也是不同的,所以我們可以用Palette來去提取Fragment中的主色調,把這個主色調用於整體的UI風格。

步驟:

 

第一步:添加依賴
compile 'com.android.support:palette-v7:23.4.0'
第二步:創建Palette對象,並獲取圖片的顏色值
package com.itydl.palette;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.graphics.Palette;
import android.view.View;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {

    private Bitmap mBitmap;
    private View mV1;
    private View mV2;
    private View mV3;
    private View mV4,mV5,mV6;
    private ImageView mImageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        mV1 = findViewById(R.id.v1);
        mV2 = findViewById(R.id.v2);
        mV3 = findViewById(R.id.v3);
        mV4 = findViewById(R.id.v4);
        mV5 = findViewById(R.id.v5);
        mV6 = findViewById(R.id.v6);
        mImageView = (ImageView) findViewById(R.id.iv_show);
    }

    public void click(View v) {
        mImageView.setImageResource(R.mipmap.h7);

        mBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.h7);
      /*  如果操作本來就屬於後台線程,可以使用:*/
        /*mPalette = Palette.generate(Bitmap mBitmap);*/

        /*如果在主線程中,我們可以使用異步的方式:*/
        Palette.generateAsync(mBitmap, new Palette.PaletteAsyncListener() {
            public void onGenerated(Palette palette) {
                //柔和的
                mV1.setBackgroundColor(palette.getMutedColor(Color.BLACK));//設置默認顏色
                //鮮艷的暗色
                mV2.setBackgroundColor(palette.getDarkMutedColor(Color.BLACK));
                //柔和的亮色
                mV3.setBackgroundColor(palette.getLightMutedColor(Color.BLACK));
                //鮮艷的
                mV4.setBackgroundColor(palette.getVibrantColor(Color.BLACK));
                //鮮艷的暗色
                mV5.setBackgroundColor(palette.getDarkVibrantColor(Color.BLACK));
                //鮮艷的亮色
                mV6.setBackgroundColor(palette.getLightVibrantColor(Color.BLACK));
            }

        });
    }
}

運行程序:

 

\

下邊的顏色都是從上邊圖片提取出來的。

最後看一下重要的應用場景,給出運行結果。對於案例,會在後邊分析。

\

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved