###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,我拉你进群交(♂)流(♀)。