1 page.title=Definir animaciones personalizadas 2 3 @jd:body 4 5 <div id="tb-wrapper"> 6 <div id="tb"> 7 <h2>Esta leccin te ensea a realizar lo siguiente:</h2> 8 <ol> 9 <li><a href="#Touch">Personalizar la respuesta tctil</a></li> 10 <li><a href="#Reveal">Usar el efecto Revelar</a></li> 11 <li><a href="#Transitions">Personalizar transiciones de actividades</a></li> 12 <li><a href="#ViewState">Animar cambios de estados de las vistas</a></li> 13 <li><a href="#AnimVector">Animar interfaces dibujables en vector</a></li> 14 </ol> 15 <h2>Tambin deberas leer</h2> 16 <ul> 17 <li><a href="http://www.google.com/design/spec">Especificacin de Material Design</a></li> 18 <li><a href="{@docRoot}design/material/index.html">Material Design en Android</a></li> 19 </ul> 20 </div> 21 </div> 22 23 24 <p>Las animaciones en Material Design proporcionan a los usuarios comentarios sobre sus acciones y continuidad visual 25 a medida que los usuarios interactan con su aplicacin. El tema material proporciona algunas animaciones predeterminadas 26 para botones y transiciones de actividades; Android 5.0 (API nivel 21) y superior te permite personalizar estas 27 animaciones y crear unas nuevas:</p> 28 29 <ul> 30 <li>Respuesta tctil</li> 31 <li>Efecto revelar circular</li> 32 <li>Transiciones de actividades</li> 33 <li>Movimiento curvo</li> 34 <li>Ver cambios de estados</li> 35 </ul> 36 37 38 <h2 id="Touch">Personalizar la respuesta tctil</h2> 39 40 <p>La respuesta tctil en Material Design proporciona una confirmacin visual instantnea en el punto 41 de contacto cuando los usuarios interactan con los elementos de la IU. Las animaciones predeterminadas de la respuesta tctil para 42 botones usan la nueva clase {@link android.graphics.drawable.RippleDrawable}, que realiza una transicin 43 entre diferentes estados con un efecto de ondas.</p> 44 45 <p>En la mayora de los casos, debes aplicar esta funcionalidad en la vista XML especificando el fondo 46 de la vista como:</p> 47 48 <ul> 49 <li><code>?android:attr/selectableItemBackground</code> para un efecto de ondas con lmites.</li> 50 <li><code>?android:attr/selectableItemBackgroundBorderless</code> para un efecto de ondas que se extiende ms all de 51 la vista. Se lo dibujar en la vista primaria ms cercana de la vista (que lo limitar) con un fondo de valor no 52 nulo.</li> 53 </ul> 54 55 <p class="note"><strong>Nota:</strong> <code>selectableItemBackgroundBorderless</code> es un nuevo 56 atributo introducido en la API de nivel 21.</p> 57 58 59 <p>Alternativamente, puedes definir un {@link android.graphics.drawable.RippleDrawable} 60 como un recurso XML que usa el elemento <code>ripple</code>.</p> 61 62 <p>Puedes asignar un color a los objetos {@link android.graphics.drawable.RippleDrawable}. Para cambiar 63 el color predeterminado de la respuesta tctil, usa el atributo <code>android:colorControlHighlight</code> 64 del tema.</p> 65 66 <p>Para ms informacin, consulta la referencia de la API para la clase {@link 67 android.graphics.drawable.RippleDrawable}.</p> 68 69 70 <h2 id="Reveal">Usar el efecto revelar</h2> 71 72 <p>Las animaciones del efecto revelar proporcionan a los usuarios una continuidad visual cuando muestras u ocultas un grupo de elementos 73 de la IU. El mtodo {@link android.view.ViewAnimationUtils#createCircularReveal 74 ViewAnimationUtils.createCircularReveal()} te permite animar un crculo de recorte para 75 revelar u ocultar una vista.</p> 76 77 <p>Para revelar una vista previamente invisible usando este efecto:</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 ocultar una vista previamente invisible usando este efecto:</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 transiciones de actividades</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>: una 143 transicin con elementos compartidos.</p> 144 <em>Para volver a reproducir la pelcula, haz clic en la pantalla del dispositivo.</em> 145 </div> 146 </div> 147 148 <p>Las transiciones de actividades en las aplicaciones de Material Design proporcionan conexiones visuales entre diferentes estados 149 mediante el movimiento y las transformaciones entre elementos comunes. Puedes especificar las animaciones personalizadas para 150 entrar y salir de las transiciones y para las transiciones de elementos compartidos entre actividades.</p> 151 152 <ul> 153 <li>Una transicin de <strong>entrada</strong> determina cmo entran en escena las vistas en una actividad. 154 Por ejemplo, en la transicin de entrada <em>expandir</em>, las vistas entran en escena desde el exterior 155 y vuelan hacia el centro de la pantalla.</li> 156 157 <li>Una transicin de <strong>salida</strong> determina cmo salen de escena las vistas en una actividad. Por 158 ejemplo, en la transicin de salida <em>expandir</em>, las vistas salen de escena lejos del 159 centro.</li> 160 161 <li>Una transicin de <strong>elementos compartidos</strong> determina cmo las vistas que estn compartidas entre 162 dos actividades realizan la transicin entre estas. Por ejemplo, si dos actividades tienen la misma 163 imagen en diferentes posiciones y tamaos, la transicin de elementos compartidos <em>changeImageTransform</em> 164 traduce y escala la imagen suavemente entre estas actividades.</li> 165 </ul> 166 167 <p>Android 5.0 (API nivel 21) admite estas transiciones de entrada y salida:</p> 168 169 <ul> 170 <li><em>expandir</em>: desplaza vistas hacia adentro o hacia afuera del centro de la escena.</li> 171 <li><em>deslizar</em>: desplaza vistas hacia adentro o hacia afuera de uno de los bordes de la escena.</li> 172 <li><em>difuminar</em>: agrega o quita una vista de la escena al cambiar su opacidad.</li> 173 </ul> 174 175 <p>Toda transicin que extiende la clase {@link android.transition.Visibility} se admite 176 como una transicin de entrada o salida. Para ms informacin, consulta la referencia de la API para la clase 177 {@link android.transition.Transition}.</p> 178 179 <p>Android 5.0 (API nivel 21) tambin admite estas transiciones de elementos compartidos:</p> 180 181 <ul> 182 <li><em>changeBounds</em>: anima los cambios en los lmites de las vistas de destino.</li> 183 <li><em>changeClipBounds</em>: anima los cambios en los lmites de recorte de las vistas de destino.</li> 184 <li><em>changeTransform</em>: anima los cambios en escala y rotacin de las vistas de destino.</li> 185 <li><em>changeImageTransform</em>: anima los cambios de tamao y escala de imgenes de destino.</li> 186 </ul> 187 188 <p>Cuando habilitas las transiciones de actividades en tu aplicacin, la transicin entre difuminados predeterminada se 189 activa entre las actividades que ingresan y salen.</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>: una transicin de escena con un elemento compartido. 194 </p> 195 196 <h3>Especificar transiciones personalizadas</h3> 197 198 <p>Primero, habilita las transiciones de contenido de la ventana con el atributo <code>android:windowContentTransitions</code> 199 cuando definas un estilo que herede del tema material. Tambin puedes especificar 200 transiciones de entrada, salida y elementos compartidos en tu definicin 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>La transicin <code>change_image_transform</code> en este ejemplo se define en la siguiente forma:</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>El elemento <code>changeImageTransform</code> corresponde a la clase 230 {@link android.transition.ChangeImageTransform}. Para ms informacin, consulta la referencia de la 231 API para {@link android.transition.Transition}.</p> 232 233 <p>Para habilitar las transiciones del contenido de las ventanas en tu cdigo, llama al 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 transiciones en tu cdigo, llama a estos mtodos con un 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>Los mtodos {@link android.view.Window#setExitTransition setExitTransition()} y {@link 257 android.view.Window#setSharedElementExitTransition setSharedElementExitTransition()} definen 258 la transicin de salida para la actividad que realiza la llamada. Los mtodos {@link android.view.Window#setEnterTransition 259 setEnterTransition()} y {@link android.view.Window#setSharedElementEnterTransition 260 setSharedElementEnterTransition()} definen la transicin de entrada para la actividad invocada.</p> 261 262 <p>Para obtener el efecto completo de una transicin, debes habilitar las transiciones de contenido de las ventanas tanto para las 263 actividades que realizan la llamada como para aquellas que son invocadas. De lo contrario, la actividad que realiza la llamada comenzar la transicin de salida, 264 pero luego observars una ventana de transicin (como escalar o difuminar).</p> 265 266 <p>Para comenzar una transicin de entrada lo antes posible, usa el mtodo 267 {@link android.view.Window#setAllowEnterTransitionOverlap Window.setAllowEnterTransitionOverlap()} 268 en la actividad invocada. Esto te permite tener transiciones de entrada ms intensas.</p> 269 270 <h3>Iniciar una actividad mediante el uso de transiciones</h3> 271 272 <p>Si permites transiciones y estableces una transicin de salida para una actividad, la transicin se activa 273 cuando inicias otra actividad, como alguna de las siguientes:</p> 274 275 <pre> 276 startActivity(intent, 277 ActivityOptions.makeSceneTransitionAnimation(this).toBundle()); 278 </pre> 279 280 <p>Si estableciste una transicin de entrada para la segunda actividad, la transicin tambin se activa 281 cuando se inicia la actividad. Para deshabilitar las transiciones cuando inicias otra actividad, proporciona 282 una agrupacin de opciones <code>null</code>.</p> 283 284 <h3>Iniciar una actividad con un elemento compartido</h3> 285 286 <p>Para realizar una animacin de transiciones de pantallas entre dos actividades que tienen un elemento compartido:</p> 287 288 <ol> 289 <li>Habilita las transiciones de contenido de ventanas en tu tema.</li> 290 <li>Especifica una transicin de elementos compartidos en tu estilo.</li> 291 <li>Define tu transicin como un recurso XML.</li> 292 <li>Asigna un nombre en comn para los elementos compartidos en ambos diseos con el atributo 293 <code>android:transitionName</code>.</li> 294 <li>Usa el 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 las vistas dinmicas compartidas que generas en tu cdigo, usa el mtodo 321 {@link android.view.View#setTransitionName View.setTransitionName()} para especificar un nombre de 322 elemento en comn en ambas actividades.</p> 323 324 <p>Para invertir la animacin de transicin de escenas cuando terminas la segunda actividad, llama al mtodo 325 {@link android.app.Activity#finishAfterTransition Activity.finishAfterTransition()} 326 en lugar del {@link android.app.Activity#finish Activity.finish()}.</p> 327 328 <h3>Iniciar una actividad con mltiples elementos compartidos</h3> 329 330 <p>Para realizar una animacin de transicin de escenas entre dos actividades que tienen ms de un elemento 331 compartido, define los elementos compartidos en ambos diseos con el atributo <code>android:transitionName</code> 332 (o usa el mtodo {@link android.view.View#setTransitionName View.setTransitionName()} 333 en ambas actividades) y crea un objeto {@link android.app.ActivityOptions} como se indica a continuacin:</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 movimiento curvo</h2> 343 344 <p>Las animaciones en Material Design se basan en curvas para la interpolacin de tiempo y los modelos de movimiento 345 espacial. Con Android 5.0 (API nivel 21) y superior, puedes definir las curvas de sincronizacin personalizadas y 346 los modelos de movimientos curvos para las animaciones.</p> 347 348 <p>La clase {@link android.view.animation.PathInterpolator} es un nuevo interpolador que se basa en una curva 349 Bzier o un objeto {@link android.graphics.Path}. Este interpolador especifica una curva de movimiento 350 en un cuadrado de 1x1, con puntos de anclaje a (0,0) y (1,1), y puntos de control segn lo especificado en los argumentos del 351 constructor. Tambin puedes definir un interpolador para la ruta de acceso como un 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>El sistema proporciona recursos XML para las tres curvas bsicas en la especificacin 362 de 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>Puedes pasar un objeto {@link android.view.animation.PathInterpolator} al mtodo {@link 371 android.animation.Animator#setInterpolator Animator.setInterpolator()}.</p> 372 373 <p>La clase {@link android.animation.ObjectAnimator} tiene nuevos constructores que te permiten animar 374 coordenadas junto a una ruta de acceso, usando dos o ms propiedades a la vez. Por ejemplo, el siguiente animador 375 usa un objeto{@link android.graphics.Path} para animar las propiedades X e Y de una vista:</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 cambios de estados de las vistas</h2> 386 387 <p>La clase {@link android.animation.StateListAnimator} te permite definir los animadores que se ejecutan cuando 388 cambia el estado de una vista. En el siguiente ejemplo, se muestra cmo definir un {@link 389 android.animation.StateListAnimator} como un 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 adjuntar animaciones personalizadas de los estados de visualizaciones, define un animador usando el elemento 418 <code>selector</code> en un archivo de recurso XML como en este ejemplo y asgnalo a tu 419 vista con el atributo <code>android:stateListAnimator</code>. Para asignar un animador de lista de estados 420 a una vista en tu cdigo, usa el mtodo {@link android.animation.AnimatorInflater#loadStateListAnimator 421 AnimationInflater.loadStateListAnimator()} y asigna el animador a tu vista con el mtodo 422 {@link android.view.View#setStateListAnimator View.setStateListAnimator()}.</p> 423 424 <p>Cuando tu tema extiende al tema material, los botones tendrn una animacin Z de manera predeterminada. Para evitar este 425 comportamiento en los botones, establece el atributo <code>android:stateListAnimator</code> en 426 <code>@null</code>.</p> 427 428 <p>La clase {@link android.graphics.drawable.AnimatedStateListDrawable} te permite crear elementos de diseo 429 que muestren animaciones entre los cambios de estados de la vista asociada. Algunos de los widgets del sistema en 430 Android 5.0 usan estas animaciones de manera predeterminada. En el siguiente ejemplo, se muestra cmo 431 definir un {@link android.graphics.drawable.AnimatedStateListDrawable} como un 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 interfaces dibujables en vector</h2> 460 461 <p>Las <a href="{@docRoot}training/material/drawables.html#VectorDrawables">interfaces dibujables en vector</a> son 462 escalables sin perder definicin. La clase {@link android.graphics.drawable.AnimatedVectorDrawable} 463 te permite animar las propiedades de un elemento de diseo en vector.</p> 464 465 <p>Generalmente, las interfaces animadas dibujables en vector se definen en tres archivos XML:</p> 466 467 <ul> 468 <li>Una interfaz dibujable en vector con el elemento <code><vector></code> en 469 <code>res/drawable/</code></li> 470 <li>Una interfaz dibujable animada en vector con el elemento <code><animated-vector></code> en 471 <code>res/drawable/</code></li> 472 <li>Uno o ms animadores de objeto con el elemento <code><objectAnimator></code> en 473 <code>res/anim/</code></li> 474 </ul> 475 476 <p>Las interfaces animadas dibujables en vector pueden animar los atributos de los elementos <code><group></code> y 477 <code><path></code>. Los elementos <code><group></code> definen un conjunto de 478 rutas de acceso o subgrupos y el elemento <code><path></code> define rutas de acceso para dibujar.</p> 479 480 <p>Cuando definas una interfaz dibujable en vector que desees animar, usa el atributo <code>android:name</code> 481 para asignar un nombre nico a grupos o rutas de acceso, de manera que puedas hacer referencia a ellos desde tus definiciones del 482 animador. Por ejemplo:</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>La definicin de la interfaz animada dibujable en vector hace referencia a grupos y rutas de acceso en el elemento de diseo en vector 505 por sus nombres:</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>Las definiciones de animacin representan objetos {@link android.animation.ObjectAnimator} o {@link 521 android.animation.AnimatorSet}. El primer animador en este ejemplo rota el grupo 522 objetivo unos 360 grados:</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>El segundo animador en este ejemplo transforma la ruta de acceso de la interfaz dibujable en vector de una forma a 534 otra. Ambas rutas de acceso deben ser compatibles para transformarse: deben tener el mismo nmero de comandos 535 y el mismo nmero 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 ms informacin, consulta la referencia de la API para {@link 550 android.graphics.drawable.AnimatedVectorDrawable}.</p> 551