• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1page.title=カスタム アニメーションの定義
2
3@jd:body
4
5<div id="tb-wrapper">
6<div id="tb">
7<h2>このレッスンでの学習内容</h2>
8<ol>
9  <li><a href="#Touch">タッチ フィードバックをカスタマイズする</a></li>
10  <li><a href="#Reveal">出現エフェクトを使用する</a></li>
11  <li><a href="#Transitions">アクティビティ遷移をカスタマイズする</a></li>
12  <li><a href="#ViewState">ビューの状態遷移にアニメーションを付ける</a></li>
13  <li><a href="#AnimVector">ベクター型ドローアブルにアニメーションを付ける</a></li>
14</ol>
15<h2>関連ドキュメント</h2>
16<ul>
17  <li><a href="http://www.google.com/design/spec">マテリアル デザインの仕様</a></li>
18  <li><a href="{@docRoot}design/material/index.html">Android でのマテリアル デザイン</a></li>
19</ul>
20</div>
21</div>
22
23
24<p>マテリアル デザインのアニメーションは、ユーザーの操作に応じて反応し、アプリの操作にともない連続した動きを見せます。
25マテリアル テーマでは、ボタンやアクティビティの遷移にデフォルトのアニメーションが用意されており、Android 5.0(API レベル 21)以降では次のようなアニメーションをカスタマイズして新しいアニメーションを作成できます。
26
27</p>
28
29<ul>
30<li>タッチ フィードバック</li>
31<li>円形状の出現</li>
32<li>アクティビティ遷移</li>
33<li>曲線モーション</li>
34<li>ビューの状態遷移</li>
35</ul>
36
37
38<h2 id="Touch">タッチ フィードバックをカスタマイズする</h2>
39
40<p>マテリアル デザインのタッチ フィードバックは、ユーザーが UI 要素に触れて操作した時点で、視覚的な反応を瞬時に表します。
41ボタンに対するデフォルトのタッチ フィードバック アニメーションでは、新しい {@link android.graphics.drawable.RippleDrawable} クラスを使用して、状態の切り替わりをリップル(波紋)効果で表現しています。
42
43</p>
44
45<p>ほとんどの場合、次のようにビューの背景を指定することでビュー XML にこの機能を適用できます。
46</p>
47
48<ul>
49<li>範囲が限定された波紋: <code>?android:attr/selectableItemBackground</code>。</li>
50<li>ビューの範囲外まで広がる波紋: <code>?android:attr/selectableItemBackgroundBorderless</code>。
51これは、背景が null ではない最も近くにある親ビュー上に表示されますが、その外側にはみ出ることはありません。
52</li>
53</ul>
54
55<p class="note"><strong>注:</strong> <code>selectableItemBackgroundBorderless</code> は API レベル 21 で導入された新しい属性です。
56</p>
57
58
59<p>または、<code>ripple</code> 要素を使って {@link android.graphics.drawable.RippleDrawable}
60を XML リソースとしても定義できます。</p>
61
62<p>{@link android.graphics.drawable.RippleDrawable} オブジェクトには、色を割り当てることができます。タッチ フィードバックのデフォルトの色を変更するには、テーマの <code>android:colorControlHighlight</code>
63属性を使用します。
64</p>
65
66<p>詳細については、API リファレンスの {@link
67android.graphics.drawable.RippleDrawable} クラスをご覧ください。</p>
68
69
70<h2 id="Reveal">出現エフェクトを使用する</h2>
71
72<p>Reveal(出現)アニメーションを使用すると、UI 要素のグループを表示したり非表示にしたりするときに連続した印象をユーザーに与えます。
73{@link android.view.ViewAnimationUtils#createCircularReveal
74ViewAnimationUtils.createCircularReveal()} メソッドでは、ビューを表示したり非表示にしたりする際に円形のアニメーションを付けることができます。
75</p>
76
77<p>この効果を使って、非表示のビューを表示するには:</p>
78
79<pre>
80// previously invisible view
81View myView = findViewById(R.id.my_view);
82
83// get the center for the clipping circle
84int cx = (myView.getLeft() + myView.getRight()) / 2;
85int cy = (myView.getTop() + myView.getBottom()) / 2;
86
87// get the final radius for the clipping circle
88int finalRadius = Math.max(myView.getWidth(), myView.getHeight());
89
90// create the animator for this view (the start radius is zero)
91Animator anim =
92    ViewAnimationUtils.createCircularReveal(myView, cx, cy, 0, finalRadius);
93
94// make the view visible and start the animation
95myView.setVisibility(View.VISIBLE);
96anim.start();
97</pre>
98
99<p>この効果を使って、表示されているビューを非表示にするには: </p>
100
101<pre>
102// previously visible view
103final View myView = findViewById(R.id.my_view);
104
105// get the center for the clipping circle
106int cx = (myView.getLeft() + myView.getRight()) / 2;
107int cy = (myView.getTop() + myView.getBottom()) / 2;
108
109// get the initial radius for the clipping circle
110int initialRadius = myView.getWidth();
111
112// create the animation (the final radius is zero)
113Animator anim =
114    ViewAnimationUtils.createCircularReveal(myView, cx, cy, initialRadius, 0);
115
116// make the view invisible when the animation is done
117anim.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
126anim.start();
127</pre>
128
129
130<h2 id="Transitions">アクティビティ遷移をカスタマイズする</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>図 1</strong> - 共有要素を使った画面遷移。
143</p>
144    <em>端末の画像をクリックすると動画を再生できます</em>
145  </div>
146</div>
147
148<p>マテリアル デザイン アプリの Activity transitions (アクティビティ遷移)では、共通する要素の間での動作や変化を通じて、状態の切り替えに視覚的なつながりを持たせます。
149Enter と Exit の遷移や、アクティビティ間での Shared elements 遷移にカスタム アニメーションを指定できます。
150</p>
151
152<ul>
153<li><strong>Enter</strong>(入口)遷移は、アクティビティのビューがどのように画面に入ってくるかを決定します。
154たとえば <em>Explode</em> の Enter 遷移の場合、ビューが画面外から画面の中心に向かって飛び込むように現れます。
155</li>
156
157<li><strong>Exit</strong> 遷移は、アクティビティのビューがどのように画面から出ていくかを決定します。同じく <em>Explode</em> の Exit 遷移の場合、画面の中心から外側に向かってビューが出ていきます。
158
159</li>
160
161<li><strong>Shared Elements</strong> 遷移は、2 つのアクティビティで共有されているビューが、各アクティビティの間でどのように遷移するかを決定します。
162たとえば、2 つのアクティビティで同じ画像を異なる位置とサイズで使用している場合、<em>changeImageTransform</em> 共有要素の遷移によって、2 つのアクティビティの間でスムーズに画像が変換されスケーリングされます。
163
164</li>
165</ul>
166
167<p>Android 5.0(API レベル 21)では、次の Enter 遷移と Exit 遷移がサポートされています。</p>
168
169<ul>
170<li><em>explode</em> (爆発状) - ビューをシーン中心から外側へ移動したり外側から中心へ移動したりします。</li>
171<li><em>slide</em> (スライド) - ビューをシーンの端から移動したり端へ移動したりします。</li>
172<li><em>fade</em> (フェード) - 不透明度を変化させながらビューをシーンに追加したりシーンから削除したりします。</li>
173</ul>
174
175<p>{@link android.transition.Visibility} クラスを拡張する Transition はすべて、EnterTransition または ExitTransition としてサポートされます。
176詳細については、API リファレンスの
177{@link android.transition.Transition} クラスをご覧ください。</p>
178
179<p>Android 5.0(API レベル 21)では、次の共有要素遷移もサポートしています。</p>
180
181<ul>
182<li><em>changeBounds</em> - 対象ビューのレイアウト範囲での変化にアニメーションを付けます。</li>
183<li><em>changeClipBounds</em> - 対象ビューのクリップ範囲での変化にアニメーションを付けます。</li>
184<li><em>changeTransform</em> - 対象ビューのスケールや向きの変化にアニメーションを付けます。</li>
185<li><em>changeImageTransform</em> - 対象画像のサイズやスケールの変化にアニメーションを付けます。</li>
186</ul>
187
188<p>アプリにアクティビティ遷移を適用すると、アクティビティの開始と終了の間でデフォルトのクロス フェーディング遷移が有効になります。
189</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>図 2</strong> - 1 つの共有要素とシーンの遷移。
194</p>
195
196<h3>カスタム遷移を指定する</h3>
197
198<p>まず、マテリアル テーマから継承したスタイルを定義するときに、<code>android:windowContentTransitions</code>
199 属性で windowContentTransitions を有効にします。また、次のように Enter、Exit、Shared Element の Transitions をスタイルの定義で指定できます。
200</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>この例の <code>change_image_transform</code> 遷移は、次のように定義されています。</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><code>changeImageTransform</code> 要素は
230{@link android.transition.ChangeImageTransform} クラスに対応します。詳細については、API リファレンスの {@link android.transition.Transition} をご覧ください。
231</p>
232
233<p>代わりに、コードで windowContentTransitions を有効にするには、
234{@link android.view.Window#requestFeature Window.requestFeature()} メソッドを呼び出します。</p>
235
236<pre>
237// inside your activity (if you did not enable transitions in your theme)
238getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
239
240// set an exit transition
241getWindow().setExitTransition(new Explode());
242</pre>
243
244<p>コードで遷移を指定するには、{@link
245android.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>{@link android.view.Window#setExitTransition setExitTransition()} と {@link
257android.view.Window#setSharedElementExitTransition setSharedElementExitTransition()} メソッドは、呼び出し元のアクティビティの ExitTransition を定義します。
258{@link android.view.Window#setEnterTransition
259setEnterTransition()} と {@link android.view.Window#setSharedElementEnterTransition
260setSharedElementEnterTransition()} メソッドは、呼び出し先のアクティビティの EnterTransition を定義します。</p>
261
262<p>遷移の効果を完全に表すには、呼び出し元と呼び出し先のアクティビティ双方で windowContentTransitions を有効にする必要があります。
263有効にしていないと、呼び出し元のアクティビティが Exit 遷移を開始したあと、window 遷移(スケールやフェードなど)が起きます。
264</p>
265
266<p>Enter 遷移をできるだけ早く開始するには、呼び出し先のアクティビティで
267{@link android.view.Window#setAllowEnterTransitionOverlap Window.setAllowEnterTransitionOverlap()}
268 メソッドを使用します。これにより、さらに印象的な Enter 遷移になります。</p>
269
270<h3>遷移を使ってアクティビティを開始する</h3>
271
272<p>遷移を有効にしてアクティビティで ExitTransition を設定した場合、次のように別のアクティビティを開始したときに Exit 遷移がアクティベートされます。
273</p>
274
275<pre>
276startActivity(intent,
277              ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
278</pre>
279
280<p>2 つ目のアクティビティに EnterTransition を設定している場合は、そのアクティビティの開始時に Enter 遷移も発生します。
281別のアクティビティ開始時の遷移を無効にするには、<code>null</code> のオプション バンドルを付与します。
282</p>
283
284<h3>共有要素を使ってアクティビティを開始する</h3>
285
286<p>共有要素を持つ 2 つのアクティビティの間で画面遷移のアニメーションを作成するには: </p>
287
288<ol>
289<li>テーマで windowContentTransitions を有効にします。</li>
290<li>スタイルで SharedElementsTransition を指定します。</li>
291<li>遷移を XML リソースとして定義します。</li>
292<li>
293<code>android:transitionName</code> 属性を用いて、双方のレイアウトで共有要素に同じ名前を割り当てます。</li>
294<li>{@link android.app.ActivityOptions#makeSceneTransitionAnimation
295ActivityOptions.makeSceneTransitionAnimation()} メソッドを使用します。</li>
296</ol>
297
298<pre>
299// get the element that receives the click event
300final View imgContainerView = findViewById(R.id.img_container);
301
302// get the common element for the transition in this activity
303final View androidRobotView = findViewById(R.id.image_small);
304
305// define a click listener
306imgContainerView.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>コードで生成した共有の動的ビューでは、
321{@link android.view.View#setTransitionName View.setTransitionName()} メソッドを使用して両方のアクティビティに共通の要素名を指定します。
322</p>
323
324<p>2 つ目のアクティビティが終了したときにシーンの切り替えアニメーションを逆回転させるには、{@link android.app.Activity#finish Activity.finish()} の代わりに
325{@link android.app.Activity#finishAfterTransition Activity.finishAfterTransition()}
326 メソッドを呼び出します。</p>
327
328<h3>複数の共有要素を使ってアクティビティを開始する</h3>
329
330<p>複数の共有要素を持つ 2 つのアクティビティの間にシーンの切り替えアニメーションを付けるには、双方のレイアウトで <code>android:transitionName</code>
331属性を使用(または双方のアクティビティで {@link android.view.View#setTransitionName View.setTransitionName()} メソッドを使用)して共有要素を定義して、次のように {@link android.app.ActivityOptions} オブジェクトを作成します。
332
333</p>
334
335<pre>
336ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this,
337        Pair.create(view1, "agreedName1"),
338        Pair.create(view2, "agreedName2"));
339</pre>
340
341
342<h2 id="CurvedMotion">曲線モーションを使用する</h2>
343
344<p>マテリアル デザインのアニメーションは、時間的な間を補ったり立体的な動作パターンを表現するために曲線を多く用いています。
345Android 5.0(API レベル 21)以降では、カスタムのタイミングで描かれる曲線や曲線モーションのパターンをアニメーションで定義できます。
346</p>
347
348<p>{@link android.view.animation.PathInterpolator} クラスはベジェ曲線や {@link android.graphics.Path} オブジェクトに基づく新しい Interpolator(補間)です。
349この Interpolator は 1x1 の正方形に動作曲線を指定します。アンカー ポイントは(0,0)と(1,1)、制御点はコンストラクタ引数を使用して指定します。
350
351または、PathInterpolator を 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>マテリアル デザインの仕様では、次の 3 つの基本的な曲線を XML リソースとして提供しています。
362</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>{@link android.view.animation.PathInterpolator} オブジェクトは {@link
371android.animation.Animator#setInterpolator Animator.setInterpolator()} メソッドに渡すことができます。</p>
372
373<p>{@link android.animation.ObjectAnimator} クラスには新しいコンストラクタがあり、一度に 2 つ以上のプロパティを使用して経路に沿ったアニメーションを作ることができます。
374たとえば、次の animator では {@link android.graphics.Path} オブジェクトを使ってビューの X と Y プロパティを指定しています。
375</p>
376
377<pre>
378ObjectAnimator mAnimator;
379mAnimator = ObjectAnimator.ofFloat(view, View.X, View.Y, path);
380...
381mAnimator.start();
382</pre>
383
384
385<h2 id="ViewState">ビューの状態遷移にアニメーションを付ける</h2>
386
387<p>{@link android.animation.StateListAnimator} クラスを使って、ビューの状態が変化したときに実行されるアニメーションを定義できます。
388次の例は、{@link
389android.animation.StateListAnimator} を 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>ビューの状態についてのカスタム アニメーションをビューに付与するには、この例のように XML リソース ファイルの
418<code>selector</code> 要素を使用して animator を定義し、それを <code>android:stateListAnimator</code> 属性でビューに割り当てます。
419コードで StateListAnimator をビューに割り当てるには、{@link android.animation.AnimatorInflater#loadStateListAnimator
420AnimationInflater.loadStateListAnimator()} メソッドを使用して
421{@link android.view.View#setStateListAnimator View.setStateListAnimator()} メソッドでビューに animator を割り当てます。
422</p>
423
424<p>テーマがマテリアル テーマに拡張されると、ボタンにはデフォルトで Z アニメーションが設定されます。これを避けるためには、<code>android:stateListAnimator</code> 属性を
425<code>@null</code> に設定します。
426</p>
427
428<p>{@link android.graphics.drawable.AnimatedStateListDrawable} クラスを使用すると、関連するビューの状態遷移にアニメーションを表示するドローアブルを作成できます。
429Android 5.0 の一部のシステム ウィジェットでは、デフォルトでこれらのアニメーションを使用しています。
430次の例は、{@link android.graphics.drawable.AnimatedStateListDrawable} を XML リソースとして定義する方法を示しています。
431</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">ベクター型ドローアブルにアニメーションを付ける</h2>
460
461<p><a href="{@docRoot}training/material/drawables.html#VectorDrawables">ベクター型ドローアブル</a>は定義を失わずにスケールできます。
462{@link android.graphics.drawable.AnimatedVectorDrawable}
463クラスを使うと、ベクター型ドローアブルのプロパティを指定してアニメーションを付けられます。</p>
464
465<p>通常は、次に示す 3 つの XML ファイルで AnimatedVectorDrawable を定義します。</p>
466
467<ul>
468<li><code>res/drawable/</code> の
469<code>&lt;vector&gt;</code> 要素を持つ vectordrawable の xml ファイル</li>
470<li><code>res/drawable/</code> の
471<code>&lt;animated-vector&gt;</code> 要素を持つ AnimatedVectorDrawable の xml ファイル</li>
472<li><code>res/anim/</code> の
473<code>&lt;objectAnimator&gt;</code> 要素を持つ 1 つ以上の ObjectAnimator の xml ファイル</li>
474</ul>
475
476<p>AnimatedVectorDrawable では、<code>&lt;group&gt;</code> 要素と
477<code>&lt;path&gt;</code> 要素の属性にアニメーションを付けることができます。<code>&lt;group&gt;</code> 要素は一連の経路やサブグループを定義し、<code>&lt;path&gt;</code> 要素は描く経路を定義します。
478</p>
479
480<p>アニメーションを付けたいベクター型ドローアブルを定義するときは、<code>android:name</code>
481属性を使用してグループや経路に一意の名前を割り当てれば animator の定義からそれらを参照できるようになります。
482以下に例を示します。</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>AnimatedVectorDrawable の定義では、次のようにベクター型ドローアブルのグループや経路をその名前で参照します。
505</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>アニメーションの定義は {@link android.animation.ObjectAnimator} オブジェクトか {@link
521android.animation.AnimatorSet} オブジェクトを示します。この例の最初の animator は、次のように対象グループを 360 度回転させています。
522</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>この例の 2 つ目の animator は、ベクター型ドローアブルの経路をある形から別の形へと変化させています。
534両方の経路が形の変化に対応できる必要があります。つまり同じ数のコマンドと、各コマンドで同じ数のパラメーターを保持している必要があります。
535</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>詳細については、API リファレンスの {@link
550android.graphics.drawable.AnimatedVectorDrawable} をご覧ください。</p>
551