Home | History | Annotate | Download | only in material
      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     &#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">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 &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>La transicin <code>change_image_transform</code> en este ejemplo se define en la siguiente forma:</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>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     &#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>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 &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>El sistema proporciona recursos XML para las tres curvas bsicas en la especificacin
    362 de Material Design:</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>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 &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>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 &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">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>&lt;vector&gt;</code> en
    469 <code>res/drawable/</code></li>
    470 <li>Una interfaz dibujable animada en vector con el elemento <code>&lt;animated-vector&gt;</code> en
    471 <code>res/drawable/</code></li>
    472 <li>Uno o ms animadores de objeto con el elemento <code>&lt;objectAnimator&gt;</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>&lt;group&gt;</code> y
    477 <code>&lt;path&gt;</code>. Los elementos <code>&lt;group&gt;</code> definen un conjunto de
    478 rutas de acceso o subgrupos y el elemento <code>&lt;path&gt;</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 &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>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 &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>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 &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>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 &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>Para ms informacin, consulta la referencia de la API para {@link
    550 android.graphics.drawable.AnimatedVectorDrawable}.</p>
    551