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 @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<style name="BaseAppTheme" parent="android:Theme.Material"> 204 <!-- enable window content transitions --> 205 <item name="android:windowContentTransitions">true</item> 206 207 <!-- specify enter and exit transitions --> 208 <item name="android:windowEnterTransition">@transition/explode</item> 209 <item name="android:windowExitTransition">@transition/explode</item> 210 211 <!-- specify shared element transitions --> 212 <item name="android:windowSharedElementEnterTransition"> 213 @transition/change_image_transform</item> 214 <item name="android:windowSharedElementExitTransition"> 215 @transition/change_image_transform</item> 216</style> 217</pre> 218 219<p>この例の <code>change_image_transform</code> 遷移は、次のように定義されています。</p> 220 221<pre> 222<!-- res/transition/change_image_transform.xml --> 223<!-- (see also Shared Transitions below) --> 224<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"> 225 <changeImageTransform/> 226</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 @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<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>@interpolator/fast_out_linear_in.xml</code></li> 366 <li><code>@interpolator/fast_out_slow_in.xml</code></li> 367 <li><code>@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<!-- animate the translationZ property of a view when pressed --> 393<selector xmlns:android="http://schemas.android.com/apk/res/android"> 394 <item android:state_pressed="true"> 395 <set> 396 <objectAnimator android:propertyName="translationZ" 397 android:duration="@android:integer/config_shortAnimTime" 398 android:valueTo="2dp" 399 android:valueType="floatType"/> 400 <!-- you could have other objectAnimator elements 401 here for "x" and "y", or other properties --> 402 </set> 403 </item> 404 <item android:state_enabled="true" 405 android:state_pressed="false" 406 android:state_focused="true"> 407 <set> 408 <objectAnimator android:propertyName="translationZ" 409 android:duration="100" 410 android:valueTo="0" 411 android:valueType="floatType"/> 412 </set> 413 </item> 414</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<!-- res/drawable/myanimstatedrawable.xml --> 435<animated-selector 436 xmlns:android="http://schemas.android.com/apk/res/android"> 437 438 <!-- provide a different drawable for each state--> 439 <item android:id="@+id/pressed" android:drawable="@drawable/drawableP" 440 android:state_pressed="true"/> 441 <item android:id="@+id/focused" android:drawable="@drawable/drawableF" 442 android:state_focused="true"/> 443 <item android:id="@id/default" 444 android:drawable="@drawable/drawableD"/> 445 446 <!-- specify a transition --> 447 <transition android:fromId="@+id/default" android:toId="@+id/pressed"> 448 <animation-list> 449 <item android:duration="15" android:drawable="@drawable/dt1"/> 450 <item android:duration="15" android:drawable="@drawable/dt2"/> 451 ... 452 </animation-list> 453 </transition> 454 ... 455</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><vector></code> 要素を持つ vectordrawable の xml ファイル</li> 470<li><code>res/drawable/</code> の 471<code><animated-vector></code> 要素を持つ AnimatedVectorDrawable の xml ファイル</li> 472<li><code>res/anim/</code> の 473<code><objectAnimator></code> 要素を持つ 1 つ以上の ObjectAnimator の xml ファイル</li> 474</ul> 475 476<p>AnimatedVectorDrawable では、<code><group></code> 要素と 477<code><path></code> 要素の属性にアニメーションを付けることができます。<code><group></code> 要素は一連の経路やサブグループを定義し、<code><path></code> 要素は描く経路を定義します。 478</p> 479 480<p>アニメーションを付けたいベクター型ドローアブルを定義するときは、<code>android:name</code> 481属性を使用してグループや経路に一意の名前を割り当てれば animator の定義からそれらを参照できるようになります。 482以下に例を示します。</p> 483 484<pre> 485<!-- res/drawable/vectordrawable.xml --> 486<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 <group 492 <strong>android:name="rotationGroup"</strong> 493 android:pivotX="300.0" 494 android:pivotY="300.0" 495 android:rotation="45.0" > 496 <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 </group> 501</vector> 502</pre> 503 504<p>AnimatedVectorDrawable の定義では、次のようにベクター型ドローアブルのグループや経路をその名前で参照します。 505</p> 506 507<pre> 508<!-- res/drawable/animvectordrawable.xml --> 509<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" 510 android:drawable="@drawable/vectordrawable" > 511 <target 512 android:name="rotationGroup" 513 android:animation="@anim/rotation" /> 514 <target 515 android:name="v" 516 android:animation="@anim/path_morph" /> 517</animated-vector> 518</pre> 519 520<p>アニメーションの定義は {@link android.animation.ObjectAnimator} オブジェクトか {@link 521android.animation.AnimatorSet} オブジェクトを示します。この例の最初の animator は、次のように対象グループを 360 度回転させています。 522</p> 523 524<pre> 525<!-- res/anim/rotation.xml --> 526<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<!-- res/anim/path_morph.xml --> 539<set xmlns:android="http://schemas.android.com/apk/res/android"> 540 <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</set> 547</pre> 548 549<p>詳細については、API リファレンスの {@link 550android.graphics.drawable.AnimatedVectorDrawable} をご覧ください。</p> 551