Google推出的Palette是用来调色的,正如其汉语意思一样,可以用来显示颜色,在显示图片的时候,会配合图片的色调来显示,这样就显得很融合,其实Palette可以分析出图片中的很多特性,例如主色调、鲜艳度、柔和度等

Palette获得的颜色

其主要的获取颜色方法如下:

获取主要颜色:getDominantColor()

获取柔和颜色:getMutedColor()

获取鲜艳颜色:getVibrantColor()

获取亮、柔和颜色:getLightMutedColor()

获取亮、鲜艳颜色:getLightVibrantColor()

获取暗、柔和颜色:getDarkMutedColor()

获取暗、鲜艳颜色:getDarkVibrantColor()

Palette实例

在一张图片中显示出获得的以上颜色,并以Google推荐的颜色显示在图片上

在手机中找到一张以前做的拍黄瓜的图片,还有煎鸡蛋的图片,这里就是用这两张图片来演示,代码没有任何变化,只是改变了ImageView里面的src源

在使用Palette要先导入依赖,25.4.0为版本号

implementation 'com.android.support:palette-v7:25.4.0'

贴出布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <RelativeLayout
android:layout_width="match_parent"
android:layout_height="300dp">
<ImageView
android:id="@+id/image_view"
android:layout_width="300dp"
android:layout_height="300dp"
android:layout_centerInParent="true"
android:src="@drawable/cuke" />
<TextView
android:id="@+id/text_view"
android:layout_marginTop="5dp"
android:layout_width="300dp"
android:layout_height="120dp"
android:layout_centerHorizontal="true"
android:layout_alignBottom="@id/image_view"
android:gravity="center"
android:textSize="24sp"/>
</RelativeLayout> <TextView
android:id="@+id/text_view_1"
android:layout_marginTop="5dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="24sp"/>
<TextView
android:id="@+id/text_view_2"
android:layout_marginTop="5dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="24sp"/>
<TextView
android:id="@+id/text_view_3"
android:layout_marginTop="5dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="24sp"/>
<TextView
android:id="@+id/text_view_4"
android:layout_marginTop="5dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="24sp"/>
<TextView
android:id="@+id/text_view_5"
android:layout_marginTop="5dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="24sp"/>
<TextView
android:id="@+id/text_view_6"
android:layout_marginTop="5dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="24sp" />
<TextView
android:id="@+id/text_view_7"
android:layout_marginTop="5dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="24sp"/> </LinearLayout>

然后在活动中使用

public class MainActivity extends AppCompatActivity {

    private ImageView imageView;
private TextView textView1;
private TextView textView2;
private TextView textView3;
private TextView textView4;
private TextView textView5;
private TextView textView6;
private TextView textView7;
private TextView textView; @Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) findViewById(R.id.image_view);
textView1 = (TextView) findViewById(R.id.text_view_1);
textView2 = (TextView) findViewById(R.id.text_view_2);
textView3 = (TextView) findViewById(R.id.text_view_3);
textView4 = (TextView) findViewById(R.id.text_view_4);
textView5 = (TextView) findViewById(R.id.text_view_5);
textView6 = (TextView) findViewById(R.id.text_view_6);
textView7 = (TextView) findViewById(R.id.text_view_7);
textView = (TextView) findViewById(R.id.text_view); BitmapDrawable bitmapDrawable = (BitmapDrawable) imageView.getDrawable();
Bitmap bitmap = bitmapDrawable.getBitmap();
//同步方法,已弃用,可能造成线程阻塞
//Palette palette = Palette.generate(bitmap);
//异步
Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
int dominantColor = palette.getDominantColor(Color.GRAY);
textView1.setBackgroundColor(dominantColor);
textView1.setText("DominantColor");
int mutedColor = palette.getMutedColor(Color.GRAY);
textView2.setBackgroundColor(mutedColor);
textView2.setText("MutedColor");
int vibrantColor = palette.getVibrantColor(Color.GRAY);
textView3.setBackgroundColor(vibrantColor);
textView3.setText("VibrantColor");
int lightMutedColor = palette.getLightMutedColor(Color.GRAY);
textView4.setBackgroundColor(lightMutedColor);
textView4.setText("LightMutedColor");
int lightVibrantColor = palette.getLightVibrantColor(Color.GRAY);
textView5.setBackgroundColor(lightVibrantColor);
textView5.setText("LightVibrantColor");
int darkMutedColor = palette.getDarkMutedColor(Color.GRAY);
textView6.setBackgroundColor(darkMutedColor);
textView6.setText("DarkMutedColor");
int darkVibrantColor = palette.getDarkVibrantColor(Color.GRAY);
textView7.setBackgroundColor(darkVibrantColor);
textView7.setText("DarkVibrantColor");
//推荐颜色获取
Palette.Swatch swatch = palette.getLightVibrantSwatch();
//推荐的主色调
int rgb = swatch.getRgb();
//推荐的主体文字颜色
int bodyTextColor = swatch.getBodyTextColor();
//推荐的标题文字颜色
int titleTextColor = swatch.getTitleTextColor();
//颜色向量
float[] hsl = swatch.getHsl();
//得到该颜色在图片中的值
int population = swatch.getPopulation(); textView.setBackgroundColor(getTranslucentColor(0.7F, rgb));
textView.setTextColor(bodyTextColor);
textView.setText("这是一道我做的菜");
}
});
} private int getTranslucentColor(float persent, int rgb) {
//转化透明度
int blue = rgb & 0xFF;
int green = rgb >>> 8 & 0xFF;
int red = rgb >>> 16 & 0xFF;
int alpha = rgb >>> 24;
alpha = Math.round(alpha * persent);
return Color.argb(alpha, red, green, blue);
}
}

运行结果如下



高级UI-Palette的更多相关文章

  1. firefox 扩展开发笔记(三):高级ui交互编程

    firefox 扩展开发笔记(三):高级ui交互编程 前言 前两篇链接 1:firefox 扩展开发笔记(一):jpm 使用实践以及调试 2:firefox 扩展开发笔记(二):进阶开发之移动设备模拟 ...

  2. Android 高级UI设计笔记07:RecyclerView 的详解

    1. 使用RecyclerView       在 Android 应用程序中列表是一个非常重要的控件,适用场合非常多,如新闻列表.应用列表.消息列表等等,但是从Android 一出生到现在并没有非常 ...

  3. iOS开发——高级UI&带你玩转UITableView

    带你玩装UITableView 在实际iOS开发中UITableView是使用最多,也是最重要的一个控件,如果你不会用它,那别说什么大神了,菜鸟都不如. 其实关于UItableView事非常简单的,实 ...

  4. 高级UI晋升之自定义View实战(六)

    更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680本篇文章将从Android 自定义属性动画&Camera动画来介绍自定义V ...

  5. 高级UI晋升之布局ViewGroup(四)

    更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680本篇文章将从LinearLayout.RelativeLayout.FrameLa ...

  6. 高级UI晋升之常用View(三)中篇

    更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680本篇文章将从ViewPager来介绍常用View:文章目录 一.简介 二.基本使用 ...

  7. 高级UI晋升之View渲染机制(二)

    更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680 优化性能一般从渲染,运算与内存,电量三个方面进行,今天开始说聊一聊Android ...

  8. 高级UI晋升之触摸事件分发机制(一)

    更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680 0. 前言 鉴于安卓分发机制较为复杂,故分为多个层次进行讲解,分别为基础篇.实践 ...

  9. Android 高级UI设计笔记21:Android SegmentView(分段选择控件)

    1. 分段控制(SegmentView) 首先我们先看看什么是SegmentView的效果,如下: 分段控制这个View控件是ios7的分段控制,和QQ消息页面顶部的效果一样,android没有这个控 ...

  10. Android 高级UI设计笔记17:Android在非UI线程中显示Toast

    1. 子线程的Toast怎么显示不出来? 因为Toast在创建的时候会依赖于一个Handler,并且一个Handler是需要有一个Looper才能够创建,而普通的线程是不会自动去创建一个Looper对 ...

随机推荐

  1. 当margin和padding的值是百分比时,如何计算

    对元素的margin设置百分数时,百分数是相对于自身包含块的width计算(包含块传送门),不管是margin-top/margin-bottom还是margin-left/margin-right. ...

  2. Echart-无需json文件的树状图(源码)超级简单,小白的福音

    源码: <!DOCTYPE html> <head> <meta charset="utf-8"> <script type=" ...

  3. vue-上拉加载、下拉刷新组件

    vue在移动端开发过程中,上拉加载.下拉刷新是页面的基本需求,现在给大家介绍一种基于touch事件封装的刷新组件. 组件支持传参.传递事件.请求成功异步回调.上拉与触底触发加载或刷新. 父子组件间的通 ...

  4. mysql 对返回的值是null进行判断和重新赋值

    SELECT IFNULL(sum(c.tax_data),) ,IFNULL(SUM(c.fiscal_ret),) FROM corp_tax c WHERE c.industry_id = 使用 ...

  5. 纯JS 10分钟 实现图片懒惰加载

    知识点: 1:h5 新增选择器  document.querySelectorAll 2:JS 经典,防抖 3:距离判断:getBoundingClientRect  思路:通过浏览器滚动事件, 判断 ...

  6. 8. String to Integer (atoi) ---Leetcode

    Implement atoi to convert a string to an integer. 题目分析: 题目本身很简单就是将一个字符串转化成一个整数,但是由于字符串的千差万别,导致在实现的时候 ...

  7. JMeter中计数器的使用

    添加计数器 计数器的引用,用于数据做区分 可以添加一个变量count,每次为了数据的唯一性,只要修改count就可以了,例如

  8. OpenJudge计算概论-细菌实验分组

    /*====================================================细菌实验分组总时间限制: 1000ms 内存限制: 65536kB描述有一种细菌分为A.B两 ...

  9. HADOOP回顾

    1. hadoop 分为四大模块 common  其他组件的公共一来模块 HDFS 分布式模块提供高吞吐量的数据访问 mapreduce 分布式计算模块 yarn 作业调度和集群资源管理模块 2. 安 ...

  10. VS中卸载Visual Assist X

    Tools=>Extensions and updates=>找到Visual Assist X 卸载: