Home | History | Annotate | Download | only in material
      1 page.title=Mendefinisikan Animasi Custom
      2 
      3 @jd:body
      4 
      5 <div id="tb-wrapper">
      6 <div id="tb">
      7 <h2>Pelajaran ini mengajarkan Anda cara</h2>
      8 <ol>
      9   <li><a href="#Touch">Menyesuaikan Umpan Balik Sentuh</a></li>
     10   <li><a href="#Reveal">Menggunakan Reveal Effect</a></li>
     11   <li><a href="#Transitions">Menyesuaikan Transisi Aktivitas</a></li>
     12   <li><a href="#ViewState">Menganimasikan Perubahan Status Tampilan</a></li>
     13   <li><a href="#AnimVector">Menganimasikan Drawable Vektor</a></li>
     14 </ol>
     15 <h2>Anda juga harus membaca</h2>
     16 <ul>
     17   <li><a href="http://www.google.com/design/spec">Spesifikasi desain bahan</a></li>
     18   <li><a href="{@docRoot}design/material/index.html">Desain bahan di Android</a></li>
     19 </ul>
     20 </div>
     21 </div>
     22 
     23 
     24 <p>Animasi dalam desain bahan memberi pengguna umpan balik tentang tindakannya dan menyediakan
     25 kesinambungan visual saat pengguna berinteraksi dengan aplikasi Anda. Tema bahan menyediakan beberapa animasi default
     26 untuk tombol dan transisi aktivitas, dan Android 5.0 (API level 21) ke atas memungkinkan Anda menyesuaikan
     27 animasi ini dan membuat yang baru:</p>
     28 
     29 <ul>
     30 <li>Umpan balik sentuh</li>
     31 <li>Singkap Melingkar</li>
     32 <li>Transisi aktivitas</li>
     33 <li>Gerakan melengkung</li>
     34 <li>Perubahan status tampilan</li>
     35 </ul>
     36 
     37 
     38 <h2 id="Touch">Menyesuaikan Umpan Balik Sentuh</h2>
     39 
     40 <p>Umpan balik sentuh dalam desain bahan menyediakan konfirmasi visual seketika pada
     41 titik kontak bila pengguna berinteraksi dengan elemen UI. Animasi umpan balik sentuh default
     42 untuk tombol menggunakan kelas {@link android.graphics.drawable.RippleDrawable} baru, yang bertransisi
     43 di antara berbagai status dengan efek riak.</p>
     44 
     45 <p>Di sebagian besar kasus, Anda harus menerapkan fungsionalitas ini dalam XML tampilan dengan menetapkan
     46 latar belakang tampilan sebagai:</p>
     47 
     48 <ul>
     49 <li><code>?android:attr/selectableItemBackground</code> untuk riak berbatas.</li>
     50 <li><code>?android:attr/selectableItemBackgroundBorderless</code> untuk riak yang meluas ke luar
     51 tampilan. Latar belakang ini akan digambar di atas, dan dibatasi oleh, induk tampilan terdekat dengan
     52 latar belakang non-null.</li>
     53 </ul>
     54 
     55 <p class="note"><strong>Catatan:</strong> <code>selectableItemBackgroundBorderless</code> adalah
     56 atribut baru yang diperkenalkan di API level 21.</p>
     57 
     58 
     59 <p>Atau, Anda bisa mendefinisikan {@link android.graphics.drawable.RippleDrawable}
     60 sebagai sumber daya XML dengan menggunakan elemen <code>ripple</code>.</p>
     61 
     62 <p>Anda bisa menetapkan warna ke objek-objek {@link android.graphics.drawable.RippleDrawable}. Untuk mengubah
     63 warna default umpan balik sentuh, gunakan atribut <code>android:colorControlHighlight</code>
     64 tema.</p>
     65 
     66 <p>Untuk informasi selengkapnya, lihat referensi API bagi kelas {@link
     67 android.graphics.drawable.RippleDrawable}.</p>
     68 
     69 
     70 <h2 id="Reveal">Menggunakan Reveal Effect</h2>
     71 
     72 <p>Animasi singkap memberi pengguna kesinambungan visual saat menampilkan atau menyembunyikan sekelompok
     73 elemen UI. Metode {@link android.view.ViewAnimationUtils#createCircularReveal
     74 ViewAnimationUtils.createCircularReveal()} memungkinkan Anda menganimasikan lingkaran terpangkas
     75 untuk memperlihatkan atau menyembunyikan tampilan.</p>
     76 
     77 <p>Untuk memperlihatkan tampilan yang sebelumnya tidak terlihat dengan menggunakan efek ini:</p>
     78 
     79 <pre>
     80 // previously invisible view
     81 View myView = findViewById(R.id.my_view);
     82 
     83 // get the center for the clipping circle
     84 int cx = (myView.getLeft() + myView.getRight()) / 2;
     85 int cy = (myView.getTop() + myView.getBottom()) / 2;
     86 
     87 // get the final radius for the clipping circle
     88 int finalRadius = Math.max(myView.getWidth(), myView.getHeight());
     89 
     90 // create the animator for this view (the start radius is zero)
     91 Animator anim =
     92     ViewAnimationUtils.createCircularReveal(myView, cx, cy, 0, finalRadius);
     93 
     94 // make the view visible and start the animation
     95 myView.setVisibility(View.VISIBLE);
     96 anim.start();
     97 </pre>
     98 
     99 <p>Untuk menyembunyikan sebuah tampilan yang sebelumnya terlihat dengan menggunakan efek ini:</p>
    100 
    101 <pre>
    102 // previously visible view
    103 final View myView = findViewById(R.id.my_view);
    104 
    105 // get the center for the clipping circle
    106 int cx = (myView.getLeft() + myView.getRight()) / 2;
    107 int cy = (myView.getTop() + myView.getBottom()) / 2;
    108 
    109 // get the initial radius for the clipping circle
    110 int initialRadius = myView.getWidth();
    111 
    112 // create the animation (the final radius is zero)
    113 Animator anim =
    114     ViewAnimationUtils.createCircularReveal(myView, cx, cy, initialRadius, 0);
    115 
    116 // make the view invisible when the animation is done
    117 anim.addListener(new AnimatorListenerAdapter() {
    118     &#64;Override
    119     public void onAnimationEnd(Animator animation) {
    120         super.onAnimationEnd(animation);
    121         myView.setVisibility(View.INVISIBLE);
    122     }
    123 });
    124 
    125 // start the animation
    126 anim.start();
    127 </pre>
    128 
    129 
    130 <h2 id="Transitions">Menyesuaikan Transisi Aktivitas</h2>
    131 
    132 <!-- shared transition video -->
    133 <div style="width:290px;margin-left:35px;float:right">
    134   <div class="framed-nexus5-port-span-5">
    135   <video class="play-on-hover" autoplay="">
    136     <source src="{@docRoot}design/material/videos/ContactsAnim.mp4">
    137     <source src="{@docRoot}design/material/videos/ContactsAnim.webm">
    138     <source src="{@docRoot}design/material/videos/ContactsAnim.ogv">
    139   </video>
    140   </div>
    141   <div style="font-size:10pt;margin-left:20px;margin-bottom:30px">
    142     <p class="img-caption" style="margin-top:3px;margin-bottom:10px"><strong>Gambar 1</strong> - Transisi
    143     dengan elemen bersama.</p>
    144     <em>Untuk memutar ulang film, klik layar perangkat</em>
    145   </div>
    146 </div>
    147 
    148 <p>Transisi aktivitas dalam aplikasi desain bahan memberikan koneksi visual antar berbagai status
    149 melalui gerakan dan transformasi di antara elemen umum. Anda bisa menetapkan animasi custom untuk
    150 masuk ke dan keluar dari transisi dan untuk transisi elemen bersama di antara aktivitas.</p>
    151 
    152 <ul>
    153 <li>Transisi <strong>masuk</strong> menentukan cara tampilan di aktivitas memasuki suatu babak.
    154 misalnya, dalam transisi masuk <em>explode</em>, tampilan memasuki babak dari sisi luar
    155 dan melayang masuk ke arah tengah layar.</li>
    156 
    157 <li>Transisi <strong>keluar</strong> menentukan cara tampilan di aktivitas keluar dari suatu babak. Misalnya
    158 , dalam transisi keluar <em>explode</em>, tampilan akan keluar dari babak dari bagian
    159 tengahnya.</li>
    160 
    161 <li>Transisi <strong>elemen bersama</strong> menentukan cara menggunakan bersama suatu tampilan
    162 oleh dua transisi aktivitas di antara aktivitas-aktivitas ini. Misalnya, jika dua aktivitas memiliki
    163 gambar yang sama dengan posisi dan ukuran berbeda, transisi elemen bersama <em>changeImageTransform</em>
    164 mentransformasikan dan menskalakan gambar secara mulus di antara aktivitas-aktivitas ini.</li>
    165 </ul>
    166 
    167 <p>Android 5.0 (API level 21) mendukung transisi masuk dan transisi keluar ini:</p>
    168 
    169 <ul>
    170 <li><em>explode</em> - Memindahkan tampilan masuk ke atau keluar dari tengah babak.</li>
    171 <li><em>slide</em> - Memindahkan tampilan masuk ke atau keluar dari salah satu tepi babak.</li>
    172 <li><em>fade</em> - Menambahkan atau menghapus tampilan dari babak dengan mengubah opasitasnya.</li>
    173 </ul>
    174 
    175 <p>Transisi apa pun yang memperluas kelas {@link android.transition.Visibility} didukung
    176 sebagai transisi masuk atau transisi keluar. Untuk informasi selengkapnya, lihat referensi API untuk kelas
    177 {@link android.transition.Transition}.</p>
    178 
    179 <p>Android 5.0 (API level 21) juga mendukung transisi elemen bersama ini:</p>
    180 
    181 <ul>
    182 <li><em>changeBounds</em> - Menganimasikan perubahan pada batas-batas layout tampilan target.</li>
    183 <li><em>changeClipBounds</em> - Menganimasikan perubahan pada batas-batas pemangkasan tampilan target.</li>
    184 <li><em>changeTransform</em> - Menganimasikan perubahan pada skala dan rotasi tampilan target.</li>
    185 <li><em>changeImageTransform</em> - Menganimasikan perubahan pada ukuran dan skala gambar target.</li>
    186 </ul>
    187 
    188 <p>Bila Anda mengaktifkan transisi aktivitas dalam aplikasi, transisi memudar-silang default akan
    189 diaktifkan di antara aktivitas masuk dan aktivitas keluar.</p>
    190 
    191 <img src="{@docRoot}training/material/images/SceneTransition.png" alt="" width="600" height="405" style="margin-top:20px" />
    192 <p class="img-caption">
    193  <strong>Gambar 2</strong> - Transisi babak dengan satu elemen bersama.
    194 </p>
    195 
    196 <h3>Menetapkan transisi custom</h3>
    197 
    198 <p>Pertama, aktifkan transisi konten jendela dengan atribut <code>android:windowContentTransitions</code>
    199 bila Anda mendefinisikan gaya yang mewarisi tema bahan. Anda juga bisa menetapkan
    200 transisi-transisi masuk, keluar, dan elemen bersama dalam definisi gaya:</p>
    201 
    202 <pre>
    203 &lt;style name="BaseAppTheme" parent="android:Theme.Material">
    204   &lt;!-- enable window content transitions -->
    205   &lt;item name="android:windowContentTransitions">true&lt;/item>
    206 
    207   &lt;!-- specify enter and exit transitions -->
    208   &lt;item name="android:windowEnterTransition">@transition/explode&lt;/item>
    209   &lt;item name="android:windowExitTransition">@transition/explode&lt;/item>
    210 
    211   &lt;!-- specify shared element transitions -->
    212   &lt;item name="android:windowSharedElementEnterTransition">
    213     &#64;transition/change_image_transform&lt;/item>
    214   &lt;item name="android:windowSharedElementExitTransition">
    215     &#64;transition/change_image_transform&lt;/item>
    216 &lt;/style>
    217 </pre>
    218 
    219 <p>Transisi <code>change_image_transform</code> dalam contoh ini didefinisikan sebagai berikut:</p>
    220 
    221 <pre>
    222 &lt;!-- res/transition/change_image_transform.xml -->
    223 &lt;!-- (see also Shared Transitions below) -->
    224 &lt;transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
    225   &lt;changeImageTransform/>
    226 &lt;/transitionSet>
    227 </pre>
    228 
    229 <p>Elemen <code>changeImageTransform</code> menunjukkan
    230 kelas {@link android.transition.ChangeImageTransform}. Untuk informasi selengkapnya, lihat referensi
    231 API untuk {@link android.transition.Transition}.</p>
    232 
    233 <p>Sebaliknya, untuk mengaktifkan transisi konten jendela dalam kode Anda, panggil
    234 metode {@link android.view.Window#requestFeature Window.requestFeature()}:</p>
    235 
    236 <pre>
    237 // inside your activity (if you did not enable transitions in your theme)
    238 getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
    239 
    240 // set an exit transition
    241 getWindow().setExitTransition(new Explode());
    242 </pre>
    243 
    244 <p>Untuk menetapkan transisi dalam kode Anda, panggil metode-metode ini dengan objek {@link
    245 android.transition.Transition}:</p>
    246 
    247 <ul>
    248   <li>{@link android.view.Window#setEnterTransition Window.setEnterTransition()}</li>
    249   <li>{@link android.view.Window#setExitTransition Window.setExitTransition()}</li>
    250   <li>{@link android.view.Window#setSharedElementEnterTransition
    251       Window.setSharedElementEnterTransition()}</li>
    252   <li>{@link android.view.Window#setSharedElementExitTransition
    253       Window.setSharedElementExitTransition()}</li>
    254 </ul>
    255 
    256 <p>Metode {@link android.view.Window#setExitTransition setExitTransition()} dan {@link
    257 android.view.Window#setSharedElementExitTransition setSharedElementExitTransition()} mendefinisikan
    258 transisi keluar untuk aktivitas yang memanggil. Metode {@link android.view.Window#setEnterTransition
    259 setEnterTransition()} dan {@link android.view.Window#setSharedElementEnterTransition
    260 setSharedElementEnterTransition()} mendefinisikan transisi masuk untuk aktivitas yang dipanggil.</p>
    261 
    262 <p>Untuk mendapatkan efek penuh sebuah transisi, Anda harus mengaktifkan transisi konten jendela pada
    263 aktivitas yang memanggil maupun aktivitas yang dipanggil. Jika tidak, aktivitas yang memanggil akan memulai transisi keluar,
    264 namun kemudian Anda akan melihat transisi jendela (seperti mengelupas atau memudar).</p>
    265 
    266 <p>Untuk memulai transisi masuk sesegera mungkin, gunakan metode
    267 {@link android.view.Window#setAllowEnterTransitionOverlap Window.setAllowEnterTransitionOverlap()}
    268 pada aktivitas yang dipanggil. Ini memungkinkan Anda mendapatkan transisi masuk yang lebih dramatis.</p>
    269 
    270 <h3>Memulai aktivitas dengan menggunakan transisi</h3>
    271 
    272 <p>Jika Anda mengaktifkan transisi dan mengatur transisi keluar untuk aktivitas, transisi itu akan diaktifkan
    273 bila Anda menjalankan aktivitas lain sebagai berikut:</p>
    274 
    275 <pre>
    276 startActivity(intent,
    277               ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
    278 </pre>
    279 
    280 <p>Jika Anda telah mengatur transisi masuk untuk aktivitas kedua, transisi juga akan diaktifkan
    281 bila aktivitas dimulai. Untuk menonaktifkan transisi bila Anda memulai aktivitas lain, sediakan
    282 bundel opsi <code>null</code>.</p>
    283 
    284 <h3>Memulai aktivitas dengan satu elemen bersama</h3>
    285 
    286 <p>Untuk membuat animasi transisi layar di antara dua aktivitas yang memiliki satu elemen bersama:</p>
    287 
    288 <ol>
    289 <li>Aktifkan transisi konten jendela dalam tema Anda.</li>
    290 <li>Tetapkan transisi elemen bersama dalam gaya Anda.</li>
    291 <li>Definisikan transisi Anda sebagai sumber daya XML.</li>
    292 <li>Tetapkan nama umum pada elemen bersama dalam kedua layout dengan
    293     atribut <code>android:transitionName</code>.</li>
    294 <li>Gunakan metode {@link android.app.ActivityOptions#makeSceneTransitionAnimation
    295 ActivityOptions.makeSceneTransitionAnimation()}.</li>
    296 </ol>
    297 
    298 <pre>
    299 // get the element that receives the click event
    300 final View imgContainerView = findViewById(R.id.img_container);
    301 
    302 // get the common element for the transition in this activity
    303 final View androidRobotView = findViewById(R.id.image_small);
    304 
    305 // define a click listener
    306 imgContainerView.setOnClickListener(new View.OnClickListener() {
    307     &#64;Override
    308     public void onClick(View view) {
    309         Intent intent = new Intent(this, Activity2.class);
    310         // create the transition animation - the images in the layouts
    311         // of both activities are defined with android:transitionName="robot"
    312         ActivityOptions options = ActivityOptions
    313             .makeSceneTransitionAnimation(this, androidRobotView, "robot");
    314         // start the new activity
    315         startActivity(intent, options.toBundle());
    316     }
    317 });
    318 </pre>
    319 
    320 <p>Untuk tampilan dinamis bersama yang Anda hasilkan dalam kode, gunakan
    321 metode {@link android.view.View#setTransitionName View.setTransitionName()} untuk menetapkan
    322 nama elemen umum di kedua aktivitas.</p>
    323 
    324 <p>Untuk membalik animasi transisi babak bila Anda menyelesaikan aktivitas kedua, panggil metode
    325 {@link android.app.Activity#finishAfterTransition Activity.finishAfterTransition()}
    326 sebagai ganti {@link android.app.Activity#finish Activity.finish()}.</p>
    327 
    328 <h3>Memulai aktivitas dengan beberapa elemen bersama</h3>
    329 
    330 <p>Untuk membuat animasi transisi babak antara dua aktivitas yang memiliki lebih dari satu
    331 elemen bersama, definisikan elemen bersama di kedua layout dengan atribut <code>android:transitionName</code>
    332  (atau gunakan metode {@link android.view.View#setTransitionName View.setTransitionName()}
    333 di kedua aktivitas), dan buat sebuah objek {@link android.app.ActivityOptions} sebagai berikut:</p>
    334 
    335 <pre>
    336 ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this,
    337         Pair.create(view1, "agreedName1"),
    338         Pair.create(view2, "agreedName2"));
    339 </pre>
    340 
    341 
    342 <h2 id="CurvedMotion">Menggunakan Gerakan Melengkung</h2>
    343 
    344 <p>Animasi dalam desain bahan mengandalkan kurva untuk pola interpolasi waktu dan
    345 gerakan spasial. Dengan Android 5.0 (API level 21) ke atas, Anda bisa mendefinisikan kurva pewaktuan custom dan
    346 pola gerakan melengkung untuk animasi.</p>
    347 
    348 <p>Kelas {@link android.view.animation.PathInterpolator} adalah interpolator baru berdasarkan sebuah
    349 kurva Bzier atau objek {@link android.graphics.Path}. Interpolator ini menetapkan kurva gerakan
    350 dalam bujur sangkar 1x1, dengan titik-titik jangkar di (0,0) dan (1,1) dan titik-titik kontrol sebagaimana ditetapkan menggunakan
    351 argumen konstruktor. Anda juga bisa mendefinisikan interpolator path sebagai sumber daya XML:</p>
    352 
    353 <pre>
    354 &lt;pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
    355     android:controlX1="0.4"
    356     android:controlY1="0"
    357     android:controlX2="1"
    358     android:controlY2="1"/>
    359 </pre>
    360 
    361 <p>Sistem menyediakan sumber daya XML untuk tiga kurva dasar dalam
    362 spesifikasi desain bahan:</p>
    363 
    364 <ul>
    365   <li><code>&#64;interpolator/fast_out_linear_in.xml</code></li>
    366   <li><code>&#64;interpolator/fast_out_slow_in.xml</code></li>
    367   <li><code>&#64;interpolator/linear_out_slow_in.xml</code></li>
    368 </ul>
    369 
    370 <p>Anda bisa meneruskan objek {@link android.view.animation.PathInterpolator} ke metode {@link
    371 android.animation.Animator#setInterpolator Animator.setInterpolator()}.</p>
    372 
    373 <p>Kelas {@link android.animation.ObjectAnimator} memiliki konstruktor-konstruktor baru yang memungkinkan Anda menganimasikan
    374 koordinat bersama sebuah path dengan menggunakan dua atau beberapa properti sekaligus. Misalnya, animator berikut
    375 menggunakan objek {@link android.graphics.Path} untuk menganimasikan properti X dan Y sebuah tampilan:</p>
    376 
    377 <pre>
    378 ObjectAnimator mAnimator;
    379 mAnimator = ObjectAnimator.ofFloat(view, View.X, View.Y, path);
    380 ...
    381 mAnimator.start();
    382 </pre>
    383 
    384 
    385 <h2 id="ViewState">Menganimasikan Perubahan Status Tampilan</h2>
    386 
    387 <p>Kelas {@link android.animation.StateListAnimator} memungkinkan Anda mendefinisikan animator yang berjalan bila
    388 status tampilan berubah. Contoh berikut menampilkan cara mendefinisikan {@link
    389 android.animation.StateListAnimator} sebagai sumber daya XML:</p>
    390 
    391 <pre>
    392 &lt;!-- animate the translationZ property of a view when pressed -->
    393 &lt;selector xmlns:android="http://schemas.android.com/apk/res/android">
    394   &lt;item android:state_pressed="true">
    395     &lt;set>
    396       &lt;objectAnimator android:propertyName="translationZ"
    397         android:duration="@android:integer/config_shortAnimTime"
    398         android:valueTo="2dp"
    399         android:valueType="floatType"/>
    400         &lt;!-- you could have other objectAnimator elements
    401              here for "x" and "y", or other properties -->
    402     &lt;/set>
    403   &lt;/item>
    404   &lt;item android:state_enabled="true"
    405     android:state_pressed="false"
    406     android:state_focused="true">
    407     &lt;set>
    408       &lt;objectAnimator android:propertyName="translationZ"
    409         android:duration="100"
    410         android:valueTo="0"
    411         android:valueType="floatType"/>
    412     &lt;/set>
    413   &lt;/item>
    414 &lt;/selector>
    415 </pre>
    416 
    417 <p>Untuk menyertakan animasi status tampilan custom ke tampilan, definisikan animator menggunakan
    418 elemen <code>selector</code> dalam sumber daya file XML sebagaimana dalam contoh ini, dan tetapkan ke
    419 tampilan Anda dengan atribut <code>android:stateListAnimator</code>. Untuk menetapkan animator daftar status
    420 ke sebuah tampilan dalam kode Anda, gunakan metode {@link android.animation.AnimatorInflater#loadStateListAnimator
    421 AnimationInflater.loadStateListAnimator()}, dan tetapkan animator ke tampilan dengan
    422 metode {@link android.view.View#setStateListAnimator View.setStateListAnimator()}.</p>
    423 
    424 <p>Bila tema Anda memperluas tema bahan, tombol-tombol akan memiliki animasi Z secara default. Untuk menghindari
    425 perilaku ini di tombol Anda, aturlah atribut <code>android:stateListAnimator</code> ke
    426 <code>@null</code>.</p>
    427 
    428 <p>Kelas {@link android.graphics.drawable.AnimatedStateListDrawable} memungkinkan Anda membuat drawable
    429 yang menampilkan animasi di antara perubahan status tampilan terkait. Sebagian widget sistem di
    430 Android 5.0 menggunakan animasi ini secara default. Contoh berikut menampilkan cara
    431 mendefinisikan {@link android.graphics.drawable.AnimatedStateListDrawable} sebagai sumber daya XML:</p>
    432 
    433 <pre>
    434 &lt;!-- res/drawable/myanimstatedrawable.xml -->
    435 &lt;animated-selector
    436     xmlns:android="http://schemas.android.com/apk/res/android">
    437 
    438     &lt;!-- provide a different drawable for each state-->
    439     &lt;item android:id="@+id/pressed" android:drawable="@drawable/drawableP"
    440         android:state_pressed="true"/>
    441     &lt;item android:id="@+id/focused" android:drawable="@drawable/drawableF"
    442         android:state_focused="true"/>
    443     &lt;item android:id="@id/default"
    444         android:drawable="@drawable/drawableD"/>
    445 
    446     &lt;!-- specify a transition -->
    447     &lt;transition android:fromId="@+id/default" android:toId="@+id/pressed">
    448         &lt;animation-list>
    449             &lt;item android:duration="15" android:drawable="@drawable/dt1"/>
    450             &lt;item android:duration="15" android:drawable="@drawable/dt2"/>
    451             ...
    452         &lt;/animation-list>
    453     &lt;/transition>
    454     ...
    455 &lt;/animated-selector>
    456 </pre>
    457 
    458 
    459 <h2 id="AnimVector">Menganimasikan Drawable Vektor</h2>
    460 
    461 <p><a href="{@docRoot}training/material/drawables.html#VectorDrawables">Drawable Vektor </a>
    462 bisa diubah skalanya tanpa kehilangan definisi. Kelas {@link android.graphics.drawable.AnimatedVectorDrawable}
    463 memungkinkan Anda menganimasikan properti drawable vektor.</p>
    464 
    465 <p>Anda biasanya mendefinisikan drawable vektor yang dianimasikan dalam tiga file XML:</p>
    466 
    467 <ul>
    468 <li>Drawable vektor dengan elemen <code>&lt;vector&gt;</code> dalam
    469 <code>res/drawable/</code></li>
    470 <li>Drawable vektor animasi dengan elemen <code>&lt;animated-vector&gt;</code> dalam
    471 <code>res/drawable/</code></li>
    472 <li>Satu atau beberapa animator objek dengan elemen <code>&lt;objectAnimator&gt;</code> dalam
    473 <code>res/anim/</code></li>
    474 </ul>
    475 
    476 <p>Drawable vektor yang dianimasikan bisa menganimasikan atribut elemen <code>&lt;group&gt;</code> dan
    477 <code>&lt;path&gt;</code>. Elemen <code>&lt;group&gt;</code> mendefinisikan satu set
    478 path atau subgrup, dan elemen <code>&lt;path&gt;</code> mendefinisikan path yang harus digambar.</p>
    479 
    480 <p>Bila Anda mendefinisikan drawable vektor yang ingin dianimasikan, gunakan atribut <code>android:name</code>
    481 untuk menetapkan nama unik ke grup dan path, sehingga Anda bisa merujuknya dari
    482 definisi animator Anda. Misalnya:</p>
    483 
    484 <pre>
    485 &lt;!-- res/drawable/vectordrawable.xml -->
    486 &lt;vector xmlns:android="http://schemas.android.com/apk/res/android"
    487     android:height="64dp"
    488     android:width="64dp"
    489     android:viewportHeight="600"
    490     android:viewportWidth="600">
    491     &lt;group
    492         <strong>android:name="rotationGroup"</strong>
    493         android:pivotX="300.0"
    494         android:pivotY="300.0"
    495         android:rotation="45.0" >
    496         &lt;path
    497             <strong>android:name="v"</strong>
    498             android:fillColor="#000000"
    499             android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" />
    500     &lt;/group>
    501 &lt;/vector>
    502 </pre>
    503 
    504 <p>Definisi drawable vektor yang dianimasikan merujuk pada grup dan path dalam drawable vektor
    505 berdasarkan namanya:</p>
    506 
    507 <pre>
    508 &lt;!-- res/drawable/animvectordrawable.xml -->
    509 &lt;animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
    510   android:drawable="@drawable/vectordrawable" >
    511     &lt;target
    512         android:name="rotationGroup"
    513         android:animation="@anim/rotation" />
    514     &lt;target
    515         android:name="v"
    516         android:animation="@anim/path_morph" />
    517 &lt;/animated-vector>
    518 </pre>
    519 
    520 <p>Definisi animasi menyatakan objek {@link android.animation.ObjectAnimator} atau {@link
    521 android.animation.AnimatorSet}. Animator pertama dalam contoh ini memutar
    522 grup target sebanyak 360 derajat:</p>
    523 
    524 <pre>
    525 &lt;!-- res/anim/rotation.xml -->
    526 &lt;objectAnimator
    527     android:duration="6000"
    528     android:propertyName="rotation"
    529     android:valueFrom="0"
    530     android:valueTo="360" />
    531 </pre>
    532 
    533 <p>Animator kedua dalam contoh ini perlahan-lahan mengubah bentuk path drawable vektor dari satu bentuk ke
    534 bentuk yang lain. Kedua path harus kompatibel untuk morphing: keduanya harus memiliki jumlah perintah yang sama
    535 dan jumlah parameter yang sama untuk setiap perintah.</p>
    536 
    537 <pre>
    538 &lt;!-- res/anim/path_morph.xml -->
    539 &lt;set xmlns:android="http://schemas.android.com/apk/res/android">
    540     &lt;objectAnimator
    541         android:duration="3000"
    542         android:propertyName="pathData"
    543         android:valueFrom="M300,70 l 0,-70 70,70 0,0   -70,70z"
    544         android:valueTo="M300,70 l 0,-70 70,0  0,140 -70,0 z"
    545         android:valueType="pathType" />
    546 &lt;/set>
    547 </pre>
    548 
    549 <p>Untuk informasi selengkapnya, lihat referensi API bagi {@link
    550 android.graphics.drawable.AnimatedVectorDrawable}.</p>
    551