AndroidPalette是Android平台上的一个强大的调色板库,可以用于根据图片的主色调自动生成颜色主题,极大地简化了颜色设计的过程。本文将从多个方面对AndroidPalette进行详细的阐述,包括使用示例、色彩分析原理、自定义配置等内容。
一、使用示例
AndroidPalette的使用非常简单,只需要在项目的build.gradle文件中添加以下依赖:
dependencies {
implementation 'com.android.support:palette-v7:xx.x.x'
}
1、基本用法
下面我们通过一个简单的实例来说明如何使用AndroidPalette。
首先,我们需要在布局文件中添加一个ImageView用于显示图片。例如:
<ImageView
android:id="@+id/image_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop" />
接着,在Activity的onCreate()方法中调用以下代码:
final ImageView imageView = findViewById(R.id.image_view);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
imageView.setTransitionName("transition_name");
}
final Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.sample_image);
Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
Palette.Swatch vibrant = palette.getVibrantSwatch();
if (vibrant != null) {
imageView.setBackgroundColor(vibrant.getRgb());
getWindow().setStatusBarColor(vibrant.getRgb());
} else {
Toast.makeText(MainActivity.this, "Could not generate vibrant color!", Toast.LENGTH_SHORT).show();
}
}
});
上述代码中,我们首先从资源中获取一张图片,然后用Palette.from()方法创建一个Palette对象,生成调色板。我们通过getVibrantSwatch()方法来获取图片中最显眼的、极具视觉冲击的颜色值,然后将该颜色值设置为ImageView的背景颜色和状态栏颜色。
2、常用方法
除了使用getVibrantSwatch()方法获取最显眼的颜色之外,Palette类还提供了许多其他有用的方法。
1)getVibrantSwatch() / getDarkVibrantSwatch() / getLightVibrantSwatch()
分别返回图片中最显眼的有活力的颜色、最显眼的暗淡的有活力的颜色和最显眼的亮丽的有活力的颜色。
2)getMutedSwatch() / getDarkMutedSwatch() / getLightMutedSwatch()
分别返回图片中最暗淡的、最暗淡的有活力的颜色和最亮丽的有活力的颜色。
3)getDominantSwatch()
返回图片中最占据主导地位的颜色。
4)getSwatches()
返回一个包含所有颜色样本集合的List。
3、自定义样本属性
AndroidPalette还提供了自定义样本属性的方法,例如从调色板中提取特定的颜色属性,比如主色调、辅助色调、背景颜色、标题颜色等等。
下面我们通过一个自定义的例子来说明如何提取特定的颜色属性。
首先,我们在build.gradle文件中添加以下依赖:
dependencies {
implementation 'com.android.support:palette-v7:xx.x.x'
}
接着,我们创建一个CustomPalette类继承自Palette,重载其中的onGenerated()方法,并在其中提取我们需要的颜色属性。例如:
public class CustomPalette extends Palette {
private final List swatches = new ArrayList();
public CustomPalette(Palette.Builder builder) {
super(builder);
}
@Override
public void onGenerated(Palette palette) {
swatches.clear();
List list = new ArrayList();
list.add(palette.getVibrantSwatch());
list.add(palette.getDarkVibrantSwatch());
list.add(palette.getLightVibrantSwatch());
list.add(palette.getMutedSwatch());
list.add(palette.getDarkMutedSwatch());
list.add(palette.getLightMutedSwatch());
for (Palette.Swatch swatch : list) {
if (swatch != null) {
PaletteSwatch ps = new PaletteSwatch();
ps.rgb = swatch.getRgb();
ps.titleTextColor = swatch.getTitleTextColor();
ps.bodyTextColor = swatch.getBodyTextColor();
swatches.add(ps);
}
}
}
public List getSwatches() {
return swatches;
}
public class PaletteSwatch {
public int rgb;
public int titleTextColor;
public int bodyTextColor;
}
}
在上述代码中,我们在onGenerated()方法中提取了图片中的五种颜色属性,并将其保存在List中,以便后续使用。
接着我们在Activity中创建一个CustomPalette对象,使用我们刚才自定义的方法获取各种颜色属性。例如:
final ImageView imageView = findViewById(R.id.image_view);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
imageView.setTransitionName("transition_name");
}
final Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.sample_image);
CustomPalette.from(bitmap).generate(new CustomPalette.PaletteAsyncListener() {
@Override
public void onGenerated(CustomPalette palette) {
List swatches = palette.getSwatches();
if (swatches != null && !swatches.isEmpty()) {
CustomPalette.PaletteSwatch p1 = swatches.get(0);
CustomPalette.PaletteSwatch p2 = swatches.get(1);
CustomPalette.PaletteSwatch p3 = swatches.get(2);
CustomPalette.PaletteSwatch p4 = swatches.get(3);
CustomPalette.PaletteSwatch p5 = swatches.get(4);
CustomPalette.PaletteSwatch p6 = swatches.get(5);
// do something with the swatches
} else {
Toast.makeText(MainActivity.this, "Could not generate custom palette!", Toast.LENGTH_SHORT).show();
}
}
});
上述代码中,我们首先创建了一个CustomPalette对象,生成调色板。然后使用我们刚才自定义的方法getSwatches()获取各种颜色属性,即可轻松地提取图片中我们需要的各种颜色属性。
二、色彩分析原理
AndroidPalette是如何实现自动色彩分析的呢?
它基于Android平台上提供的Palette API,Palette API是在Android 5.0(API level 21)中引入的一个新特性,它可以在图片中提取出有用的色彩信息。Palette从图片中提取出一组调色板并扫描图片中的像素,提取出颜色合集。Palette会分析这些颜色,并且计算出每一个颜色的色相、饱和度和亮度值(HSL值)。Palette还会在颜色之间建立一些关系,并将其归类到一些色彩类型,例如亮丽、暗淡、有活力的颜色等等。
下面是Palette API的一些核心类和方法。
1、Palette类
Palette类表示一个调色板对象,可以通过它获取颜色集合以及各种颜色属性。主要方法有:
- from(Bitmap bitmap):从位图获取一个新的Palette对象。
- from(Bitmap bitmap, int numColors):从位图获取一个新的Palette对象,并指定颜色数。
- from(Bitmap bitmap, int numColors, int maximumColorCount):从位图获取一个新的Palette对象,并指定颜色数及最大颜色数。
- generate():生成调色板。
2、Palette.Swatch类
Palette.Swatch类表示调色板中的一个颜色样本,主要方法有:
- getRgb():获取RGB颜色。
- getHsl():获取HSL颜色。
- getPopulation():获取该颜色在图片中所占比例。
- getTitleTextColor():获取该颜色作为标题时的文本颜色。
- getBodyTextColor():获取该颜色作为正文时的文本颜色。
3、Palette.Builder类
Palette.Builder类用于创建Palette对象,可以通过以下方法设置生成调色板时的一些参数。主要方法有:
- maximumColorCount(int count):设置最大颜色数量。
- resizeBitmapSize(int size):设置调整位图大小。
- setRegion(int left, int top, int right, int bottom):设置颜色抽样区域。
三、自定义配置
AndroidPalette还提供了自定义配置的方法,我们可以通过自定义配置来控制调色板的生成过程。
1、自定义颜色数量
我们可以通过Palette.Builder.maximumColorCount()方法来设置调色板中允许的最大颜色数量,从而影响调色板的生成。
Palette.from(bitmap).maximumColorCount(16).generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
// Use the generated palette
}
});
2、自定义着重颜色
我们可以通过Palette.Builder.setTargetColor()方法来设置调色板的着重颜色,该颜色将会被尽可能多地使用到调色板的生成过程中。
Palette.from(bitmap).setTargetColor(Color.RED).generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
// Use the generated palette
}
});
3、自定义颜色抽样区域
我们可以通过Palette.Builder.setRegion()方法来设置颜色抽样区域,该方法接受四个参数left、top、right、bottom,分别表示颜色抽样的左上角、右下角的坐标。
Palette.from(bitmap).setRegion(50, 50, 100, 100).generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
// Use the generated palette
}
});
总结
AndroidPalette是一个非常有用而且强大的调色板库,可以让设计师和开发人员轻松地将图片的颜色提取出来,并用于界面设计、字体颜色、状态栏颜色等等。本文详细介绍了AndroidPalette的使用方法、色彩分析原理以及自定义配置等内容,希望能对大家有所帮助。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/279535.html