Red de conocimiento informático - Computadora portátil - ¿Cuáles son los tipos de animación en el sistema Android?

¿Cuáles son los tipos de animación en el sistema Android?

Antes de Android 3.0 (es decir, API Nivel 11), Android solo admitía 2 tipos de animación: y después de 3.0, Android admitía un nuevo sistema de animación llamado "animación de propiedades": animación de propiedades.

Animación de cuadro: (animación cuadro por cuadro)

Esto es fácil de entender. Las imágenes cuadro por cuadro utilizan el principio residual de la visión humana para darnos la sensación de animación. Este es el mismo principio que las imágenes GIF y la reproducción de películas.

1. La definición de animación cuadro por cuadro es relativamente simple, siempre que utilice subelementos en la definición para definir todos los cuadros de reproducción.

(1)android: oneshot establece si se reproducirá solo una vez

(2)android: drawable establece la imagen de cada cuadro

(3)android: La duración establece el intervalo de cambio de imagen

2. Establece AnimationDrawable como fondo de ImageView

android: background=@anim/frame_anim

Entonces podemos usar el código Java. Obtenga el objeto AnimationDrawable en

AnimationDrawable anim = (AnimationDrawable)imageView.getBackground();

(Cabe señalar que AnimationDrawable no se reproduce de forma predeterminada. Llame al método start() para comenzar a reproducir. Llame a stop para detener la reproducción)

3. Los archivos de animación anteriores se configuran mediante archivos xml. Si lo desea, también puede crear un objeto AnimationDrawable en código java y luego pasar addFrame(Drawable. fotograma, duración int) El método agrega fotogramas a la animación y luego inicia(). .

Animación de interpolación:

La animación de interpolación significa que solo necesitamos especificar los "fotogramas clave" iniciales y finales, y el sistema debe calcular otros fotogramas cuando cambian, y no es necesario definirlos cuadro por cuadro.

1. Android usa Animation para representar animación abstracta, que incluye cuatro subclases: AlphaAnimation (animación de transparencia), ScaleAnimation (animación de escala), TranslateAnimation (animación de desplazamiento), RotateAnimation (animación de transparencia).

Android permite la creación de objetos de clase Animación en Java, pero los archivos de recursos de animación generalmente se usan para definir animaciones y separar la interfaz de la lógica

lt android: interpolator="@android:anim/linear_ interpolator; " xmlns: android="/apk/res/android"gt;

lt;! -- Definir transformación de transparencia--gt;

lt;-- Definir transformación de rotación--gt>

lt; "0" android:pivotx="50" android:pivoty="50" android.android:duration="3000/" android:from Degrees="0" android:pivotx="50" android:pivoty="50" android: To Degrees="1800"gt;

lt;/rotategt;lt;/alphagt;lt;/setgt;

(Un conjunto puede definir múltiples animaciones al mismo tiempo y ejecutarlas juntos. )

2. android: interpolator=@android: anim/linear_interpolator controla el número de fotogramas que deben interpolarse en la animación. En pocas palabras, controla la velocidad de la animación, que se traduce. como "interpolación" en algunos lugares. Existen múltiples clases de implementación para interpoladores: interpolador lineal (LinearInterpolator), interpolador de aceleración (AccelerateInterpolator), interpolador de aceleración y desaceleración (AccelerateDecelerateInterpolator), interpolador de ciclo (CycleInterpolator), interpolador de desaceleración (DecelerateInterpolator) Para un uso específico, consulte el sitio web oficial. Demostración de API.

3. Después de definir los archivos de animación, podemos cargar estos archivos a través del kit de herramientas AnimationUtils y devolver una animación después de que la carga sea exitosa. Luego puede iniciar la animación a través de startAnimation(anim) de View para comenzar a ejecutar. animación. setInterpolator(interpolator);

// Ejecutar animación en la vista

view.startAnimation(anim);

3. Animación de atributos: (animación de atributos)<. /p>

La animación de propiedades, introducida en Android 3.0, nos permite cambiar directamente las propiedades de un objeto. En la animación interpolada anterior, solo se cambia el efecto de dibujo de la Vista y las propiedades reales de la Vista no cambian. Suponga que usa la animación Tween para mover un botón de izquierda a derecha. No importa cómo haga clic en el botón movido, no tendrá ninguna reacción. Pero si hace clic en la posición del botón antes de moverlo, reaccionará porque la propiedad de posición del botón no ha cambiado. La animación de propiedad puede cambiar directamente el valor de propiedad del objeto Ver, lo que nos permite reducir el trabajo de procesamiento y mejorar la eficiencia y legibilidad del código.

(1) ValueAnimator: contiene todas las funciones principales de la animación de atributos, como el tiempo de animación, los valores de atributos de inicio y fin y los métodos de cálculo de los valores de atributos de tiempo correspondientes. Hay dos pasos para aplicar ValueAnimator

1 Calcule el valor de la propiedad.

2 Realizar operaciones basadas en valores de propiedades, como cambiar las propiedades de un objeto.

Nuestro trabajo principal es el segundo paso. Necesitamos implementar la interfaz ValueAnimator.onUpdateListener. Esta interfaz tiene solo una función onAnimationUpdate(). Todo el trabajo de cambiar las propiedades del objeto Ver se completará en esto. interfaz.

animación. addUpdateListener(new AnimatorUpdateListener() {

@Override

public void onAnimationUpdate(ValueAnimator animación) {

// hacer tu trabajo

}

});

(2) ObjectAnimator: heredado de ValueAnimator, necesitas especificar un objeto y una de sus propiedades, y luego calcular el valor de la propiedad Se establece automáticamente en la propiedad correspondiente del objeto, es decir, se completan todas las animaciones de propiedad de dos pasos en todas las operaciones de dos pasos. En aplicaciones prácticas, ObjectAnimator se usa generalmente para cambiar una determinada propiedad de un objeto, pero existen ciertas limitaciones en el uso de ObjectAnimator. Para usar ObjectAnimator, se deben cumplir las siguientes condiciones:

1. una función de establecimiento: set (nomenclatura Camel)

2 Como en el siguiente ejemplo, para métodos de taller como ofFloat, el primer parámetro es el nombre del objeto, el segundo es el nombre del atributo y el último parámetro es el parámetro variable. Si los valores... El parámetro está configurado para tener un solo valor, entonces se asumirá que es el valor objetivo. El rango de cambio del valor del atributo es desde el valor actual hasta el valor objetivo. obtener el valor actual, el objeto debe tener el atributo correspondiente. Para obtener el valor actual, el objeto debe tener el atributo correspondiente: get

3 Si hay un método getter, el tipo. del valor de retorno debe ser el mismo que el tipo de parámetro del método de establecimiento correspondiente.

ObjectAnimator oa=ObjectAnimator.ofFloat(tv, alpha, 0f, 1f);

oa.setDuration(3000);

oa.start();

Si no se cumplen las condiciones anteriores, solo podremos utilizar diligentemente ValueAnimator para crear animaciones.

(3) Animator.AnimatorListener: puede configurar un detector de animación para Animator, pero debe sobrecargar los siguientes cuatro métodos.

onAnimationStart()

onAnimationEnd()

onAnimationRepeat()

onAnimationCancel()

Aquí, nosotros También puede implementar AnimatorListenerAdapter, que tiene la ventaja de definir solo los eventos que desea escuchar, en lugar de tener que definir un cuerpo de función vacío para cada función.

anim.addListener(new AnimatorListenerAdapter() {

public void on AnimationEnd(Animator Animation){

//haz tu trabajo

}

});

(4) AnimationSet: puede combinar varias animaciones para que funcionen juntas

AnimatorSet Bouncer = new AnimatorSet( );

bouncer.play(anim1).antes(anim2);

bouncer.play(anim2).con(anim3);

bouncer.play (anim2).con (anim4)

bouncer.play(anim5).after(anim2);

animatorSet.start();

El código anterior significa: reproducir anim1 primero juega anim2, anim3, anim4 al mismo tiempo; juega anim5 al final;

(5) TimeInterplator: similar al interpolador de Tween. Existen los siguientes tipos

Acelerar interpolador (AccelerateInterpolator) acelera, comienza lento y acelera en el medio

Desacelerar interpolador (DecelerateInterpolator) desacelera, comienza rápido y luego desacelera

AccelerateDecelerateInterpolator (AccelerateDecelerateInterpolator) acelera y luego desacelera. Comience y termine lentamente, luego acelere en el medio

AnticipateInterpolator Reverse (reverso), cambie en la dirección opuesta por un tiempo, luego acelere

AnticipateOvershootInterpolator Reverse (reverso) más rebote (rebote), cambia en la dirección opuesta, luego acelera, se mueve lentamente hasta el valor objetivo después de exceder el valor objetivo y luego se mueve lentamente hasta el valor objetivo

BounceInterpolator Jump (salto), cuando el valor objetivo Cuando casi se alcanza, el valor saltará. Por ejemplo, el valor objetivo es 100 y los valores posteriores pueden ser 85, 77, 70, 80, 90, 100. Después del bucle CycleInterpolator. la animación se repite un cierto número de veces, el valor cambiará a una función sinusoidal: Math sin(2 * mCycles * Math.PI * input)

LinearInterpolator lineal, cambio lineal uniforme

OvershottInterpolator rebota, eventualmente excede el valor objetivo y luego cambia lentamente al valor objetivo

Interfaz de animación TimeInterpolator. TimeInterpolator es una interfaz que le permite personalizar el interpolador. Las anteriores son todas las implementaciones de esta interfaz

(6) Fotogramas clave: además del inicio y el final de los fotogramas clave, también nos permite definir fotogramas clave.

Fotograma clave kf0 = Fotograma clave.ofInt(0, 400);

Fotograma clave kf1 = Fotograma clave.ofInt(0.25f, 200);

Fotograma clave kf2 = Fotograma clave; .ofInt(0.5f, 400);

Fotograma clave kf4 = Fotograma clave.ofInt(0.75f, 100);

Fotograma clave kf3 = Fotograma clave.ofInt(1f, 500); p>

p>

PropertyValuesHolder pvhRotation = PropertyValuesHolder.ofKeyframe(width, kf0, kf1. kf2, kf4, kf3);

ObjectAnimator rotationAnim = ObjectAnimator.ofPropertyValuesHolder.ofKeyframe(btn, pvhRotation) ;

El significado del código anterior es: establezca el ancho de btn = 400 al comienzo de la animación, establezca el ancho = 200 cuando la animación avance a 1/4, establezca el ancho = 400 cuando la animación continúa a 1/2 y establece el ancho = 400 cuando la animación continúa a 1/2. Establece el ancho = 100 en 1/4 y el ancho = 500 al final de la animación.

(7) ViewPropertyAnimator: cambie varias propiedades de View al mismo tiempo para cambiar varias propiedades. Se recomienda encarecidamente utilizar esta clase. Esta clase está optimizada para animaciones de múltiples propiedades e incorporará algo de invalidate() para reducir la cantidad de veces que se actualiza la vista. Esta clase es muy fácil de usar, pero requiere API NIVEL 12, que es Android 3.1 o superior. El movimiento horizontal y vertical se puede lograr con una sola línea de código

myView.animate().translationX(50f).translationY(100f);

(8) Algunas propiedades que a menudo deben cambiarse:

traducciónX, traducciónY: desplazamiento de la Vista con respecto a su posición original

rotación, rotaciónX, rotaciónY: rotación. la rotación se usa para rotar ángulos en dos dimensiones, y las dos últimas se usan para ángulos en tres dimensiones

scaleX, scaleY: relación de escala

x, y: las coordenadas finales de la vista, es decir, la vista Las posiciones izquierda y superior más la traducción X y la traducción Y

alfa: transparencia

Cuatro.

Cuarto, finalmente resuma las ventajas y desventajas de estas tres animaciones:

(1) La animación de fotogramas se utiliza principalmente para reproducir un fotograma de imágenes preparadas, similar a Comparado. con imágenes GIF, la ventaja es que es simple y conveniente de usar, pero la desventaja es que cada cuadro de la imagen debe prepararse con anticipación

(2)Tween Animation ((2)Tween; Animación) solo necesita definir los fotogramas clave inicial y final, y el sistema completa el cambio del fotograma intermedio. La ventaja es que no es necesario preparar cada fotograma. La desventaja es que solo cambia el dibujo del objeto. , pero no cambia las propiedades de la Vista en sí. Entonces, si cambia la posición del botón, aún deberá hacer clic en la posición original del botón para que surta efecto.

(3) Property Animation es una animación lanzada después de 3.0. La ventaja es que es fácil de usar, reduce la complejidad de la implementación, cambia directamente las propiedades del objeto y se puede aplicar a casi cualquier objeto. objeto, no solo Es una clase de Vista. La desventaja es que requiere soporte API superior a 3.0 y tiene muchas restricciones. Sin embargo, actualmente existe una biblioteca de código abierto en el extranjero que puede brindar soporte para versiones bajas.