使用图片

阿里云产品限时红包,最高 ¥1888 元,立即领取

这是来自 Google 官方的 Material Design 培训教程的翻译,受个人水平所限,难免有翻译不对的地方,欢迎交流指正。

图片所具有的下面能力可以帮助你在应用程序中实现 material design。

  • 图片着色。
  • 抽取主色彩。
  • 矢量图片。

这节课程教你如何在应用程序中使用这些特性。

对图片资源进行着色

在 Android 5.0 ( API 21) 及以上,你可以定义透明度对位图和 9 patch 图片进行着色。你可以使用颜色资源或者对应颜色资源的主题属性(如 ?android:attr/colorPrimary )对他们进行着色。通常,你只需要一次创建这些资源并对他们自动着色来适应你的主题。

通过 setTint() 方法可以对 BitmapDrawable, NinePatchDrawable 或 VectorDrawable 对象应用着色。也可以在布局中使用 android:tintandroid:tintMode 属性来设置着色的颜色和模式。

从图片中抽取主色彩

在 Android Support 库 r21 及以上版本中包含有 Palette 类,可以从一张图片中抽取主色彩。这个类可以抽取下面的突出色彩:

要抽取这些色彩,当你在加载图片时在后台线程里面传递 Bitmap 对象到 Palette.generate() 静态方法中。如果你没有使用线程,那边调用 Palette.generateAsync() 方法并提供一个监听器。

在 Palette 类中,使用获取方法来从图片获取主要色彩,如 Palette.getVibrantColor

在项目中使用 Palette 类时,需要添加下面的 Gradle 依赖到应用程序模块:

1
2
3
4
dependencies {
...
compile 'com.android.support:palette-v7:21.0.0'
}

更多信息,可以查看 API 参考中的 Palette 类。

创建矢量图片

在 Android 5.0 (API 21) 及以上,你可以定义矢量图片,这些图片在缩放过程中不会丢失清晰度。对应于每种屏幕密度需要一个位图文件,所有的屏幕密度仅需要一个矢量文件。要创建矢量图片,你需要在 XML 文件中的 <vector> 元素中定义形状细节。

下面的实例定义了一个心形的矢量图片:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!-- res/drawable/heart.xml -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
<!-- intrinsic size of the drawable -->
android:height="256dp"
android:width="256dp"
<!-- size of the virtual canvas -->
android:viewportWidth="32"
android:viewportHeight="32">

<!-- draw a path -->
<path android:fillColor="#8fff"
android:pathData="M20.5,9.5
c-1.955,0,-3.83,1.268,-4.5,3
c-0.67,-1.732,-2.547,-3,-4.5,-3
C8.957,9.5,7,11.432,7,14
c0,3.53,3.793,6.257,9,11.5
c5.207,-5.242,9,-7.97,9,-11.5
C25,11.432,23.043,9.5,20.5,9.5z" />
</vector>

矢量图片在 Android 中表现为 VectorDrawable 对象。关于 pathData 语法的更多信息,可以查看 SVG 路径。矢量图片中动画属性相关的更多信息,可以查看动画矢量图片

原文:Working with Drawables