page.title=Working with Drawables @jd:body
The following capabilities for drawables help you implement material design in your apps:
This lesson shows you how to use these features in your app.
With Android 5.0 (API level 21) and above, you can tint bitmaps and nine-patches defined as
alpha masks. You can tint them with color resources or theme attributes that resolve to color
resources (for example, ?android:attr/colorPrimary
). Usually, you create these assets
only once and color them automatically to match your theme.
You can apply a tint to {@link android.graphics.drawable.BitmapDrawable} or {@link
android.graphics.drawable.NinePatchDrawable} objects with the {@code setTint()} method. You can
also set the tint color and mode in your layouts with the android:tint
and
android:tintMode
attributes.
The Android Support Library r21 and above includes the {@link android.support.v7.graphics.Palette} class, which lets you extract prominent colors from an image. This class extracts the following prominent colors:
To extract these colors, pass a {@link android.graphics.Bitmap} object to the {@link android.support.v7.graphics.Palette#generate Palette.generate()} static method in the background thread where you load your images. If you can't use that thread, call the {@link android.support.v7.graphics.Palette#generateAsync Palette.generateAsync()} method and provide a listener instead.
You can retrieve the prominent colors from the image using the getter methods in the
Palette
class, such as Palette.getVibrantColor
.
To use the {@link android.support.v7.graphics.Palette} class in your project, add the following Gradle dependency to your app's module:
dependencies { ... compile 'com.android.support:palette-v7:21.0.0' }
For more information, see the API reference for the {@link android.support.v7.graphics.Palette} class.
Android Vector Graphics
In Android 5.0 (API Level 21) and above, you can define vector drawables, which scale without
losing definition. You need only one asset file for a vector image, as opposed to an asset file for
each screen density in the case of bitmap images. To create a vector image, you define the details
of the shape inside a <vector>
XML element.
The following example defines a vector image with the shape of a heart:
<!-- 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>
Vector images are represented in Android as {@link android.graphics.drawable.VectorDrawable}
objects. For more information about the pathData
syntax, see the SVG Path reference. For more information
about animating the properties of vector drawables, see
Animating Vector Drawables.