He hecho un AnimatorSet de tres ObjectAnimator que quiero repetir sequentally.

<?xml version="1.0" encoding="utf-8"?>
<set
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:ordering="sequentially">

    <objectAnimator
        android:propertyName="rotation"
        android:duration="300"
        android:valueFrom="0"
        android:valueTo="5"
        android:valueType="floatType"/>

    <objectAnimator
        android:propertyName="rotation"
        android:duration="600"
        android:valueFrom="5"
        android:valueTo="-5"
        android:valueType="floatType"/>

    <objectAnimator
        android:propertyName="rotation"
        android:duration="300"
        android:valueFrom="-5"
        android:valueTo="0"
        android:valueType="floatType"/>

</set>

Pero si puedo configurar el CycleInterpolator a AnimatorSet porque los Animadores comenzará sequentally

public void setInterpolator (TimeInterpolator interpolador)
Agregó en el nivel de la API 11

Establece el TimeInterpolator para todos los actuales niño animaciones de este AnimatorSet.

Lo he intentado en un bucle de reinicio AnimatorSet mediante el establecimiento de un oyente, pero se detiene por unos cuantos milisegundos y el efecto de reiniciar AnimatorSet es notable.

a.addListener(new AnimatorListenerAdapter() {
    @Override
    public void onAnimationEnd(Animator animation)
    {
        animation.start();
    }
});

¿Qué puedo hacer para loop (a excepción de la construcción de una enorme lista de ObjectAnimators o escribir mi propia animación usando Hilo y Controlador)?

4 Comentarios

  1. 6

    En desesperada necesidad de esta función, resulta que algunos ya han encontrado la solución.

    http://www.jefflinwood.com/2013/04/repeating-android-animations-with-animatorset/

    Todo el crédito pertenece al autor original.

    mAnimationSet.addListener(new AnimatorListenerAdapter() {
    
    @Override
    public void onAnimationEnd(Animator animation) {
        super.onAnimationEnd(animation);
        mAnimationSet.start();
    }
    
    });
    mAnimationSet.start();
    • Recuerdo que lo probé. Que se había producido un pequeño pero notable retraso cada vez que se reinicia.
    • sólo pulida uno de mi proyecto con este método(en Kindle Fire HDX, fade-in, fade-out, a continuación, recorrer de nuevo), sin demora observada por mi parte.
    • Difícil de creer animationset no puede ser un bucle!!!
  2. 4

    Una solución para este caso en particular es la creación de un AnimatorSet con el primer elemento para girar la mitad y la segunda para mantener la rotación de

    <?xml version="1.0" encoding="utf-8"?>
    <set
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:ordering="sequentially">
    
        <objectAnimator
            android:propertyName="rotation"
            android:duration="150"
            android:valueFrom="0"
            android:valueTo="-5"
            android:valueType="floatType"/>
    
        <objectAnimator
            android:propertyName="rotation"
            android:duration="300"
            android:valueFrom="-5"
            android:valueTo="5"
            android:repeatMode="reverse"
            android:repeatCount="infinite"
            android:valueType="floatType"/>
    
    </set>
  3. -1

    Que usted necesita para establecer un modo de repetición a la AnimationSet, ver:

    http://developer.android.com/reference/android/view/animation/Animation.html#attr_android:repeatMode

    • Usted se refiere a la Animación. Animador objeto no tiene ningún tipo de método.
    • Tienes razón, no me di cuenta. Así que usted puede crear mediante programación AnimatorSet que contiene muchas veces la misma instancia de XML definido por el AnimatorSet, o como pskink sugiere hacer una costumbre de bucle interpolador. Me gustaría utilizar el módulo en lugar de seno
    • Traté de <set> en <set> pero se aplica el Interpolador para todos los niños. Y de nuevo AnimatorSet con Interpolador + inflado AnimatorSet sólo no se repita.
    • Unidad que solo quieren su objeto girar CW CCW y, a continuación, finalmente, a la derecha, a la derecha? así que no complicarse demasiado esto y el uso personalizado interpolador
    • su bucle no interpolador, es sólo interpolador que hace lo OP quería lograr con el 3 objeto de animadores y lo hace sin problemas, por el contrario, OP solución
  4. -1

    acaba de pedir que se repita:

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
       android:ordering="sequentially"
       android:repeatMode="reverse"
       android:repeatCount="infinite">

    =)

    contar también puede ser un número definido.

    • Usted se refiere a la Animación. Animador objeto no tiene ningún tipo de método.
    • sí, así es: developer.android.com/reference/android/animation/…
    • ValueAnimator tiene, pero estoy usando un AnimatorSet (que se extiende Animador, no ValueAnimator).
    • repeatCount en <set> de la res/animador/ xmls no funciona. Sólo probamos.
    • Pero me han dado una Idea para una solución!

Dejar respuesta

Please enter your comment!
Please enter your name here