1 page.title=Como definir animaes personalizadas 2 3 @jd:body 4 5 <div id="tb-wrapper"> 6 <div id="tb"> 7 <h2>Esta lio ensina a</h2> 8 <ol> 9 <li><a href="#Touch">Personalizar feedback de toque</a></li> 10 <li><a href="#Reveal">Usar o efeito de revelao</a></li> 11 <li><a href="#Transitions">Personalizar transies de atividades</a></li> 12 <li><a href="#ViewState">Animar mudana de estado da visualizao</a></li> 13 <li><a href="#AnimVector">Animar desenhveis de vetor</a></li> 14 </ol> 15 <h2>Voc tambm deve ler</h2> 16 <ul> 17 <li><a href="http://www.google.com/design/spec">Especificaes do Material Design</a></li> 18 <li><a href="{@docRoot}design/material/index.html">Material Design no Android</a></li> 19 </ul> 20 </div> 21 </div> 22 23 24 <p>As animaes no Material Design do feedback aos usurios sobre as aes deles e fornecem 25 continuidade visual medida que interagem com o seu aplicativo. O tema do Material fornece algumas animaes padro para 26 botes e transies de atividades e o Android 5.0 (API de nvel 21) e posteriores permitem a personalizao 27 dessas animaes e a criao de novas:</p> 28 29 <ul> 30 <li>Feedback de toque</li> 31 <li>Revelao circular</li> 32 <li>Transies de atividades</li> 33 <li>Movimento curvado</li> 34 <li>Mudanas de estado da visualizao</li> 35 </ul> 36 37 38 <h2 id="Touch">Personalizar feedback de toque</h2> 39 40 <p>Os feedbacks de toque no Material Design fornecem confirmao visual instantnea no 41 ponto de contato quando os usurios interagem com elementos da interface do usurio. As animaes de feedback de toque padro 42 para botes usam a nova classe {@link android.graphics.drawable.RippleDrawable}, que passa por transies 43 entre diferentes estados com um efeito de ondulao.</p> 44 45 <p>Na maioria dos casos, voc deve aplicar essa funcionalidade no XML de visualizao especificando o segundo plano da 46 visualizao como:</p> 47 48 <ul> 49 <li><code>?android:attr/selectableItemBackground</code> para uma ondulao delimitada.</li> 50 <li><code>?android:attr/selectableItemBackgroundBorderless</code> para uma ondulao que se estenda alm 51 da visualizao. Ele ser desenhado sobre e delimitado pelo pai mais prximo da visualizao com um segundo plano 52 no nulo.</li> 53 </ul> 54 55 <p class="note"><strong>Observao:</strong> <code>selectableItemBackgroundBorderless</code> um novo 56 atributo introduzido na API de nvel 21.</p> 57 58 59 <p>Alternativamente, voc pode definir um {@link android.graphics.drawable.RippleDrawable} 60 como um recurso XML usando o elemento <code>ripple</code>.</p> 61 62 <p>Voc pode atribuir uma cor para objetos {@link android.graphics.drawable.RippleDrawable}. Para alterar 63 a cor do feedback de toque padro, use o atributo <code>android:colorControlHighlight</code> 64 do tema.</p> 65 66 <p>Para obter mais informaes, consulte a referncia de API para a classe {@link 67 android.graphics.drawable.RippleDrawable}.</p> 68 69 70 <h2 id="Reveal">Usar o efeito de revelao</h2> 71 72 <p>Revelar animaes fornece continuidade visual aos usurios ao exibir ou esconder um grupo 73 de elementos da interface do usurio. O mtodo {@link android.view.ViewAnimationUtils#createCircularReveal 74 ViewAnimationUtils.createCircularReveal()} permite animar um crculo de recorte para 75 revelar ou ocultar uma visualizao.</p> 76 77 <p>Para revelar uma visualizao anteriormente invisvel usando esse efeito:</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>Para esconder uma visualizao anteriormente visvel usando esse efeito:</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 @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">Personalizar transies de atividades</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>Figura 1</strong> - uma 143 transio com elementos compartilhados.</p> 144 <em>Para reproduzir o filme, clique na tela do dispositivo</em> 145 </div> 146 </div> 147 148 <p>As transies de atividades em aplicativos com Material Design fornecem conexes visuais 149 entre estados diferentes por meio de movimentos e transformaes entre elementos comuns. Voc pode especificar animaes personalizadas para 150 transies de entrada e de sada e para transies de elementos compartilhados entre atividades.</p> 151 152 <ul> 153 <li>Uma transio de <strong>entrada</strong> determina como as visualizaes em uma atividade entram em cena. 154 Por exemplo, na transio de entrada <em>explodir</em>, as visualizaes entram em cena por fora 155 e voam em direo ao centro da tela.</li> 156 157 <li>Uma transio de <strong>sada</strong> determina como as visualizaes em uma atividade saem de cena. Por 158 exemplo, na transio de sada <em>explodir</em>, as visualizaes saem de cena a partir do 159 centro.</li> 160 161 <li>Uma transio de <strong>elementos compartilhados</strong> determina como as visualizaes compartilhadas 162 entre duas atividades fazem transio entre essas atividades. Por exemplo, se duas atividades tm a mesma 163 imagem em posies e tamanhos diferentes, a transio de elemento compartilhado <em>changeImageTransform</em> converte 164 e dimensiona a imagem suavemente entre essas atividades.</li> 165 </ul> 166 167 <p>O Android 5.0 (API de nvel 21) compatvel com estas transies de entrada e de sada:</p> 168 169 <ul> 170 <li><em>explodir</em> - move as visualizaes para dentro ou para fora partindo do centro da cena.</li> 171 <li><em>deslizar</em> - move as visualizaes para dentro ou para fora partindo de um dos cantos da cena.</li> 172 <li><em>esmaecer</em> - adiciona ou remove uma visualizao de uma cena alterando a opacidade.</li> 173 </ul> 174 175 <p>Qualquer transio que amplie a classe {@link android.transition.Visibility} suportada 176 como uma transio de entrada ou de sada. Para obter mais informaes, consulte a referncia de API para a classe 177 {@link android.transition.Transition}.</p> 178 179 <p>O Android 5.0 (API de nvel 21) tambm compatvel com estas transies de elementos compartilhados:</p> 180 181 <ul> 182 <li><em>changeBounds</em> - anima as mudanas das visualizaes desejadas em limites do layout.</li> 183 <li><em>changeBounds</em> - anima as mudanas das visualizaes desejadas em limites de corte.</li> 184 <li><em>changeBounds</em> - anima as mudanas das visualizaes desejadas em escala e rotao.</li> 185 <li><em>changeImageTransform</em> - anima as mudanas das imagens desejadas em tamanho e escala.</li> 186 </ul> 187 188 <p>Ao habilitar as transies de atividades no seu aplicativo, a transio de esmaecimento cruzado padro 189 ativada entre as atividades de entrada e sada.</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>Figura 2</strong> - uma transio de cena com um elemento compartilhado. 194 </p> 195 196 <h3>Especificar transies de atividades</h3> 197 198 <p>Primeiro, habilite as transies de contedo da janela com o atributo <code>android:windowContentTransitions</code> 199 ao definir um estilo herdado do tema do Material. Voc tambm pode especificar 200 transies de entrada, sada e elemento compartilhado na definio de estilo:</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>A transio <code>change_image_transform</code> nesse exemplo definida a seguir:</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>O elemento <code>changeImageTransform</code> corresponde classe 230 {@link android.transition.ChangeImageTransform}. Para obter mais informaes, consulte a referncia de 231 API para {@link android.transition.Transition}.</p> 232 233 <p>Para habilitar transies de contedo da janela no cdigo como alternativa, chame o mtodo 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) 238 getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS); 239 240 // set an exit transition 241 getWindow().setExitTransition(new Explode()); 242 </pre> 243 244 <p>Para especificar transies no cdigo, chame os mtodos a seguir com um objeto {@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>Os mtodos {@link android.view.Window#setExitTransition setExitTransition()} e {@link 257 android.view.Window#setSharedElementExitTransition setSharedElementExitTransition()} definem 258 a transio de sada para a atividade de chamada. Os mtodos {@link android.view.Window#setEnterTransition 259 setEnterTransition()} e {@link android.view.Window#setSharedElementEnterTransition 260 setSharedElementEnterTransition()} definem a transio de entrada para a atividade chamada.</p> 261 262 <p>Para obter o efeito completo de uma transio, voc deve habilitar as transies de contedo da janela tanto na atividade 263 chamada quanto na atividade de chamada. Caso contrrio, a atividade de chamada acionar a transio de sada, 264 mas voc ver uma transio de janela (como dimensionamento ou esmaecimento).</p> 265 266 <p>Para iniciar uma transio de entrada o mais cedo possvel, use o mtodo 267 {@link android.view.Window#setAllowEnterTransitionOverlap Window.setAllowEnterTransitionOverlap()} 268 na atividade chamada. Isso faz com que haja transies de entrada mais dramticas.</p> 269 270 <h3>Iniciar uma atividade usando transies</h3> 271 272 <p>Se voc habilita as transies e define uma transio de sada para uma atividade, a transio 273 ser ativada ao iniciar outra atividade, como a seguir:</p> 274 275 <pre> 276 startActivity(intent, 277 ActivityOptions.makeSceneTransitionAnimation(this).toBundle()); 278 </pre> 279 280 <p>Se voc configurou uma transio de entrada para a segunda atividade, a transio tambm 281 ser ativada quando a atividade for iniciada. Para desabilitar as transies ao iniciar outra atividade, fornea um pacote de 282 opes <code>null</code>.</p> 283 284 <h3>Iniciar uma atividade com um elemento compartilhado</h3> 285 286 <p>Para criar uma animao de transio de tela entre duas atividades que tm um elemento compartilhado:</p> 287 288 <ol> 289 <li>Habilite transies de contedo da janela no tema.</li> 290 <li>Especifique uma transio de elementos compartilhados no estilo.</li> 291 <li>Defina a transio como um recurso XML.</li> 292 <li>Atribua um nome comum aos elementos compartilhados em ambos os layouts com o atributo 293 <code>android:transitionName</code>.</li> 294 <li>Use o mtodo {@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 @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>Para obter visualizaes dinmicas compartilhadas geradas no cdigo, use o mtodo 321 {@link android.view.View#setTransitionName View.setTransitionName()} para especificar um nome de 322 elemento comum em ambas as atividades.</p> 323 324 <p>Para reverter a animao de transio de cena ao finalizar a segunda atividade, chame o mtodo 325 {@link android.app.Activity#finishAfterTransition Activity.finishAfterTransition()} 326 em vez de {@link android.app.Activity#finish Activity.finish()}.</p> 327 328 <h3>Iniciar uma atividade com diversos elementos compartilhados</h3> 329 330 <p>Para criar uma animao de transio de cena entre duas atividades que tm mais de um elemento 331 compartilhado, defina os elementos compartilhados em ambos os layouts com o atributo <code>android:transitionName</code> 332 (ou use o mtodo {@link android.view.View#setTransitionName View.setTransitionName()} em ambas 333 as atividades) e crie um objeto {@link android.app.ActivityOptions}, como a seguir:</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">Usar movimento curvado</h2> 343 344 <p>As animaes no Material Design dependem das curvas para obter padres de interpolao 345 de tempo e de movimentos espaciais. Com o Android 5.0 (API de nvel 21) e posteriores, voc pode definir padres de curvas de 346 temporizao personalizada e de movimentos curvados para animaes.</p> 347 348 <p>A classe {@link android.view.animation.PathInterpolator} um novo interpolador baseado em uma 349 curva Bzier ou em um objeto {@link android.graphics.Path}. Esse interpolador especifica uma curva de movimento em 350 um quadrado de 1x1, com pontos de ancoragem em (0,0) e (1,1) e pontos de controle conforme especificado usando 351 os argumentos do construtor. Voc tambm pode definir um interpolador de caminho como um recurso 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>O sistema fornece recursos XML para trs curvas bsicas na especificao do 362 Material Design:</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>Voc pode passar um objeto {@link android.view.animation.PathInterpolator} para o mtodo {@link 371 android.animation.Animator#setInterpolator Animator.setInterpolator()}.</p> 372 373 <p>A classe {@link android.animation.ObjectAnimator} tem novos construtores que permitem a animao de 374 coordenadas ao longo de um caminho usando duas ou mais propriedades simultaneamente. Por exemplo, o animador a seguir usa um 375 objeto {@link android.graphics.Path} para animar as propriedades X e Y de uma visualizao:</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">Animar mudana de estado da visualizao</h2> 386 387 <p>A classe {@link android.animation.StateListAnimator} permite a definio de animadores que so executados 388 quando o estado de uma visualizao muda. O exemplo a seguir mostra como definir um {@link 389 android.animation.StateListAnimator} como um recurso 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>Para anexar animaes de estado de visualizao personalizadas a uma visualizao, defina um animador usando o elemento 418 <code>selector</code> em um arquivo de recurso XML, como nesse exemplo, e 419 atribua-o visualizao com o atributo <code>android:stateListAnimator</code>. Para atribuir um animador de lista de estado 420 a uma visualizao no cdigo, use o mtodo {@link android.animation.AnimatorInflater#loadStateListAnimator 421 AnimationInflater.loadStateListAnimator()} e atribua o animador visualizao com o mtodo 422 {@link android.view.View#setStateListAnimator View.setStateListAnimator()}.</p> 423 424 <p>Quando o tema amplia o tema do Material, os botes tm uma animao Z por padro. Para evitar esse 425 comportamento nos botes, defina o atributo <code>android:stateListAnimator</code> como 426 <code>@null</code>.</p> 427 428 <p>A classe {@link android.graphics.drawable.AnimatedStateListDrawable} permite a criao de 429 desenhveis que exibem animaes entre mudanas de estado da visualizao associada. Alguns dos widgets de sistema no 430 Android 5.0 usam essas animaes por padro. O exemplo a seguir mostra como 431 definir um {@link android.graphics.drawable.AnimatedStateListDrawable} como um recurso XML:</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">Animar desenhveis de vetor</h2> 460 461 <p><a href="{@docRoot}training/material/drawables.html#VectorDrawables">Desenhveis de vetor</a> so 462 dimensionveis sem perder definio. A classe {@link android.graphics.drawable.AnimatedVectorDrawable} 463 permite a animao de propriedades de um desenhvel de vetor.</p> 464 465 <p>Voc normalmente define desenhveis de vetor animados em trs arquivos XML:</p> 466 467 <ul> 468 <li>Um desenhvel de vetor com o elemento <code><vector></code> em 469 <code>res/drawable/</code></li> 470 <li>Um desenhvel de vetor animado com o elemento <code><animated-vector></code> em 471 <code>res/drawable/</code></li> 472 <li>Um ou mais animadores de objeto com o elemento <code><objectAnimator></code> em 473 <code>res/anim/</code></li> 474 </ul> 475 476 <p>Desenhveis de vetor animados podem animar os atributos dos elementos <code><group></code> e 477 <code><path></code>. Os elementos <code><group></code> definem um conjunto de 478 caminhos ou subgrupos e o elemento <code><path></code> define caminhos a serem desenhados.</p> 479 480 <p>Ao definir um desenhvel de vetor que voc queira animar, use o atributo <code>android:name</code> 481 para atribuir um nome nico a grupos e caminhos para poder referenci-los nas definies 482 do animador. Por exemplo:</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>A definio de desenhvel de vetor animado se refere a grupos e caminhos no desenhvel de vetor 505 pelos respectivos nomes:</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>As definies de animao representam objetos {@link android.animation.ObjectAnimator} ou {@link 521 android.animation.AnimatorSet}. O primeiro animador nesse exemplo gira o grupo 522 desejado em 360:</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>O segundo animador nesse exemplo transforma a forma do caminho do desenhvel 534 de vetor. Ambos os caminhos devem ser compatveis com a transformao: eles precisam ter o mesmo 535 nmero de comandos e de parmetros para cada comando.</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>Para obter mais informaes, consulte a referncia de API para {@link 550 android.graphics.drawable.AnimatedVectorDrawable}.</p> 551