| page.title=Working with Drawables | |
| @jd:body | |
| <div id="tb-wrapper"> | |
| <div id="tb"> | |
| <h2>This lesson teaches you to</h2> | |
| <ol> | |
| <li><a href="#DrawableTint">Tint Drawable Resources</a></li> | |
| <li><a href="#ColorExtract">Extract Prominent Colors from an Image</a></li> | |
| <li><a href="#VectorDrawables">Create Vector Drawables</a></li> | |
| </ol> | |
| <h2>You should also read</h2> | |
| <ul> | |
| <li><a href="http://www.google.com/design/spec">Material design specification</a></li> | |
| <li><a href="{@docRoot}design/material/index.html">Material design on Android</a></li> | |
| <li><a href="{@docRoot}tools/help/vector-asset-studio.html">Vector Asset Studio</a></li> | |
| <li><a href="{@docRoot}tools/help/image-asset-studio.html">Image Asset Studio</a></li> | |
| </ul> | |
| </div> | |
| </div> | |
| <p>The following capabilities for drawables help you implement material design in your apps:</p> | |
| <ul> | |
| <li>Drawable tinting</li> | |
| <li>Prominent color extraction</li> | |
| <li>Vector drawables</li> | |
| </ul> | |
| <p>This lesson shows you how to use these features in your app.</p> | |
| <h2 id="DrawableTint">Tint Drawable Resources</h2> | |
| <p>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, <code>?android:attr/colorPrimary</code>). Usually, you create these assets | |
| only once and color them automatically to match your theme.</p> | |
| <p>You can apply a tint to {@link android.graphics.drawable.BitmapDrawable}, {@link | |
| android.graphics.drawable.NinePatchDrawable} or {@link | |
| android.graphics.drawable.VectorDrawable} objects with the {@code setTint()} method. You can | |
| also set the tint color and mode in your layouts with the <code>android:tint</code> and | |
| <code>android:tintMode</code> attributes.</p> | |
| <h2 id="ColorExtract">Extract Prominent Colors from an Image</h2> | |
| <p>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:</p> | |
| <ul> | |
| <li>Vibrant</li> | |
| <li>Vibrant dark</li> | |
| <li>Vibrant light</li> | |
| <li>Muted</li> | |
| <li>Muted dark</li> | |
| <li>Muted light</li> | |
| </ul> | |
| <p>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.</p> | |
| <p>You can retrieve the prominent colors from the image using the getter methods in the | |
| <code>Palette</code> class, such as <code>Palette.getVibrantColor</code>.</p> | |
| <p>To use the {@link android.support.v7.graphics.Palette} class in your project, add the following | |
| <a href="{@docRoot}studio/build/index.html#dependencies">Gradle dependency</a> to your | |
| app's module:</p> | |
| <pre> | |
| dependencies { | |
| ... | |
| compile 'com.android.support:palette-v7:21.0.0' | |
| } | |
| </pre> | |
| <p>For more information, see the API reference for the {@link android.support.v7.graphics.Palette} | |
| class.</p> | |
| <h2 id="VectorDrawables">Create Vector Drawables</h2> | |
| <!-- video box --> | |
| <a class="notice-developers-video" | |
| href="https://www.youtube.com/watch?v=wlFVIIstKmA" | |
| style="margin-top:18px"> | |
| <div> | |
| <h3>Video</h3> | |
| <p>Android Vector Graphics</p> | |
| </div> | |
| </a> | |
| <p>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 <code><vector></code> XML element.</p> | |
| <p>The following example defines a vector image with the shape of a heart:</p> | |
| <pre> | |
| <!-- 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> | |
| </pre> | |
| <p>Vector images are represented in Android as {@link android.graphics.drawable.VectorDrawable} | |
| objects. For more information about the <code>pathData</code> syntax, see the <a | |
| href="http://www.w3.org/TR/SVG11/paths.html#PathData">SVG Path reference</a>. For more information | |
| about animating the properties of vector drawables, see | |
| <a href="{@docRoot}training/material/animations.html#AnimVector">Animating Vector Drawables</a>.</p> |