Animación de propiedades de Android


Uno Tres animaciones de Android

  1. Animación de interpolación (animación de interpolación, animación de vista): el efecto de animación generado por la transformación continua de la imagen (traducción, escala, rotación) en los objetos de la escena es un tipo de animación de gradiente.

  2. Animación de cuadro (animación de cuadro): reproducción secuencial de imágenes prefabricadas, es una animación de transición de pantalla.

  3. Animación de propiedades: la animación de propiedades, que logra efectos de animación cambiando dinámicamente las propiedades de los objetos. La animación de propiedades es una nueva característica de la API 11.

dos. Ventajas de la animación de propiedades

1. La animación de atributos se ajusta a través del umbral, que puede completar de manera eficiente los efectos de animación simples, ahorrando así espacio en la memoria.

2. En comparación con la animación de fotogramas, el efecto de animación se realiza cambiando imágenes, lo que puede lograr efectos de animación complejos pero consume mucha memoria.

3. La animación de atributos se usa principalmente para cambios de estado de los controles, mientras que la animación de cuadros se usa para mostrar imágenes complejas y continuas, como videos cortos.

tres. Instancia de animación de propiedad

1. Visualización de efectos

inserte la descripción de la imagen aquí

2. clave

Archivo de diseño .xml, con un diseño lineal, cuatro botones y una imagen


Código principal activo

(1) método moveView, modifique la posición de la vista y luego llame a este método para establecer las coordenadas iniciales, el ancho y la altura

moveView privado vacío (Ver vista, int rawX, int rawY) { int izquierda = rawX - view.getWidth() / 2; int top = rawY - view.getHeight(); peso int = izquierda + vista.getWidth(); altura int = superior + vista.getHeight(); view.layout(izquierda, arriba, peso, altura); } (2)动画的实现






Botón 1, implementación de código de movimiento lineal

@Override
public void onClick(View view) { //Obtener el ancho y alto del diseño total int ancho = ly_root.getWidth(); int height = ly_root.getHeight(); ValueAnimator va = ValueAnimator.ofInt(height, 0, height / 4, height / 2, height / 4 * 3, height); va.setDuration (3000l); va.addUpdateListener(new ValueAnimator.AnimatorUpdate Listener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { int x = ancho / 2 ; int y = (int) va.getAnimatedValue(); moveView(img_babi, x, y); } } ); va.setInterpolator(new LinearInterpolator ( ) ) ; va.start ( ) ; } botón dos , zoom
















@Override
public void onClick(Ver vista) { escala flotante final = 0.5f; AnimatorSet scaleSet = new AnimatorSet(); ValueAnimator vaSmall = ValueAnimator.ofFloat(1.0f, scale); vaPequeño.setDuración(500);



ValueAnimator vaLarge = ValueAnimator.ofFloat(scale, 1.0f);
vaLarge.setDuration(500);
vaSmall.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator valueAnimator) {
        float scale = (float) valueAnimator.getAnimatedValue();
        img_babi.setScaleX(scale);
        img_babi.setScaleY(scale);
    }
});
vaLarge.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator valueAnimator) {
        float scale = (float) valueAnimator.getAnimatedValue();
        img_babi.setScaleX(scale);
        img_babi.setScaleY(scale);
    }
});
scaleSet.play(vaLarge).after(vaSmall);
scaleSet.start();

}
botón tres, rotar

@Override
public void onClick(Ver vista) { int ancho = ly_root.getWidth(); altura int = ly_root.getHeight(); final int R = ancho / 4; ValueAnimator va = ValueAnimator.ofFloat(0, (float) (2.0f * Math.PI)); va.setDuración(1000); va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { float t = (float) valueAnimator.getAnimatedValue(); int x = (int) (R * Math.sin(t) + ancho / 2); int y = (int) (R * Math.cos(t) + altura / 2); moveView(img_babi, x, y); } }); va.setInterpolator(nuevo DecelerateInterpolator()); va.start(); }

















Botón cuatro, rotación circular

@Override
public void onClick(Ver vista) { ValueAnimator va = ValueAnimator.ofInt(0, 360); va.setDuración(1000l); va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { int rotar = (Integer) valueAnimator.getAnimatedValue(); img_babi.setRotation(rotar); float fracciónValue = valueAnimator.getAnimatedFraction(); img_babi.setAlpha(fractionValue); } }); va.setInterpolator(nuevo DecelerateInterpolator()); va.start();












}
3. Resumen de funciones de código

Los métodos ofFloat, ofInt se utilizan para crear instancias de ValueAnimator

El método set... se puede utilizar para establecer la duración de la animación, etc.

El método start() puede iniciar la animación.

Enlace original:

guoguoguoyaonuli

http://t.csdn.cn/vzwEj

Supongo que te gusta

Origin blog.csdn.net/fjnu_se/article/details/128179691
Recomendado
Clasificación