Cómo agregar transparencia y animación de traducción a programas de Android
Animación interpolada: los efectos de animación se generan cambiando continuamente la imagen de los objetos en la escena (traducción, escala y rotación).
Animación de fotogramas: reproduce imágenes prediseñadas en secuencia, similar a la reproducción de una película.
Antes de usar la animación, debemos aprender a definir la animación, lo cual nos será de gran ayuda en el uso de la animación. La animación se define en formato XML y el archivo XML definido se almacena en res/anim. Debido a que existe una gran diferencia en la definición y el uso de animación interpolada y animación de fotogramas, las presentaremos por separado. En este espacio, presentaremos la definición y el uso de la animación interpolada y, en el siguiente espacio, presentaremos la animación de fotogramas en detalle. De acuerdo con la estructura de los documentos XML, los nodos principales, los nodos secundarios y los atributos, se introduce la animación de interpolación, que incluye cuatro tipos:
Alfa: efecto de animación transparente degradado
Escala: usando degradado El efecto de la animación de escala de tamaño.
Traducir: efecto de animación de la posición de la pantalla en movimiento.
Rotación: Efecto de animación que cambia la posición de la pantalla.
Antes de presentar los cuatro tipos anteriores, primero introduzcamos los atributos de nodo de la animación de interpolación***.
Tabla 1
Atributo [Tipo] Función
El atributo Duración[long] es la duración de la animación en milisegundos.
FillAfter [booleano] Cuando se establece en verdadero, la transformación de la animación se aplica después de la animación.
Cuando FillBefore[boolean] se establece en verdadero, la transformación de la animación se aplica antes de que comience la animación.
Interpoladores
Existen algunos interpoladores comunes que se utilizan para especificar interpoladores de animación.
Acceleration_Deceleration_Interpolator
Insertor de animación de aceleración y desaceleración
Interpolador de aceleración
Insertor de animación de aceleración
p>Interpolador_de aceleración
p>Insertor de animación de desaceleración
Otros son efectos de animación específicos.
RepeatCount[int]El número de repeticiones de la animación.
el modo de repetición[cadena] define el comportamiento de repetición 1: "reiniciar" 2: "revertir" Por ejemplo: Android: repetirmode = "revertir".
StartOffset[long] El intervalo de tiempo entre animaciones, a partir del momento en que la animación anterior dejó de ejecutar la siguiente animación.
ZAdjustment[int] define el cambio de orden Z de la animación 0: mantener el orden Z sin cambios.
1: Mantener el máximo nivel.
-1: Mantenlo en el nivel más bajo.
Después de leer los nodos anteriores, ¿quieres comenzar a definir animaciones? Comencemos con ejemplos específicos para presentar los cuatro tipos de elementos de nodo únicos.
Tabla 2
Descripción de la función del nodo XML
Efecto de animación de transparencia de gradiente alfa
ltLa primera letra del alfabeto griego
android: fromAlpha="0.1 "
android: toAlpha="1.0 "
Android: duración = " 3000 "/gt;
propiedad fromAlpha es la transparencia cuando comienza la animación.
0.0 significa transparencia total.
1.0 significa completamente opaco.
Los valores anteriores son números de tipo de datos de punto flotante entre 0,0-1,0.
La propiedad ToAlpha es la transparencia al final de la animación.
Tabla 3
Efecto de animación de extensión de tamaño de gradiente de escala
escala lt
Android: interpolator = " @ Android: anim/accelerate _ desacelerar _ interpolador "
android:desdeXScale="0.0 "
android: hastaXScale="1.4 "
android: desdeYScale="0.0 "
android:toYScale="1.4 "
android:pivotX="50 "
android:pivotY="50 "
android:fillAfter=" false "
android:startOffset="700 "
android:duration="700 "
Android:repeat count = " 10 "/gt; p>
android:duration="700 "
p>
Cuando desde xscale[float]desde escala[float] es el inicio de la animación, una dimensión de escala de 0.0 en el x Las coordenadas y y significan que se reducirá a cero.
1.0 significa normal sin escalar.
Valores inferiores a 1,0 indican contracción.
Valores superiores a 1,0 indican amplificación.
escala tox[float]
ToYScale[float] es el tamaño escalado en coordenadas xey al final de la animación.
pivotX[float]
Pivot [float] es el valor del atributo de la posición inicial de la animación en relación con las coordenadas X e Y del objeto: el valor es 0-100, 50 es el del objeto La posición del punto medio de la coordenada X o Y.
Tabla 4
Traduce el efecto de animación de cambiar la posición de la imagen.
traducción lt
android: fromXDelta="30"
android: toXDelta="-80"
android: fromYDelta=" 30 "
Android: toYDelta="300 "
Android: duración = " 2000 "/ />
fromXDelta
ToXDelta es animación Las posiciones final e inicial en la coordenada X.
Fromedelta
ToYDelta es la posición en la coordenada Y cuando la animación termina y comienza.
Tabla 5
Efecto de animación de rotación de transferencia de imagen giratoria
ltradial
Android: interpolator = " @ Android: anim/ acelerar _ desacelerar _ interpolador "
android:fromDegrees="0 "
android:toDegrees=" 350 "
android:pivotX="50 " p>
android: pivotY="50"
Android: length="3000"/gt;
FromDegrees es la descripción del ángulo del objeto al comienzo de la animación.
Cuando el ángulo es negativo, significa rotación en sentido antihorario.
Cuando el ángulo es positivo, significa rotación en el sentido de las agujas del reloj.
(Números negativos de -- a números positivos: rotación en sentido horario)
(Números negativos de -- a números negativos: rotación en sentido antihorario)
(Números positivos de -- a números negativos: rotación en sentido antihorario) ——A números positivos: rotación en sentido horario)
(Números positivos de —— a números negativos: rotación en sentido antihorario)
La propiedad toDegrees significa que el ángulo de rotación del objeto al final de la animación puede ser mayor que 360 Spend.
pivotX
PivotY es el inicio de la animación relativa a las coordenadas X e Y del objeto: los valores de las dos propiedades anteriores se toman de 0 a 100.
50 es la posición del punto medio de la coordenada X o Y del objeto.
Con base en lo anterior, aprendí la definición de animación interpolada y tengo una comprensión detallada de la animación interpolada. A continuación, aprenderé el paquete de animación (Android. View. Animation), que proporciona métodos para operar. Animación interpolada. Todas las clases.
El SDK de Android proporciona una clase base: Animación, que contiene una gran cantidad de funciones set/getXXXX() para configurar y leer las propiedades de la animación, que son las diversas propiedades que se muestran en la Tabla 1 anterior. La animación de interpolación consta de cuatro tipos: alfa, escala, traducción y rotación. Las clases correspondientes se proporcionan en el SDK de Android. La clase Animation deriva animaciones como AlphaAnimation, ScaleAnimation, TranslateAnimation y RotateAnimation. Cada subclase agrega sus propios atributos únicos según la clase principal. Veamos si los constructores de estas clases son exactamente iguales a las propiedades que definimos en la Tabla 2, Tabla 3, Tabla 4 y Tabla 5.
Después de comprender la definición de animación interpolada y tener algunos conocimientos básicos de android.view.animation, comencé a presentarles cómo utilizar la animación interpolada. El SDK de Android proporciona dos métodos: 1. Leer la animación directamente desde los recursos XML; 2. Utilizar el constructor de la subclase Animación para inicializar el objeto Animación; El segundo método es saber cómo usarlo después de leer las descripciones de varias clases en el SDK de Android. A continuación se explica brevemente cómo leer animaciones de recursos XML y se presenta todo el proceso de uso de acuerdo con el proceso de desarrollo de la aplicación, de la siguiente manera:
1. Cree un proyecto de Android
2. Importar recursos de imágenes;
3. Agregue el gadget ImageView; en res/layout/main.xml
4. file Defina un archivo XML de animación en la carpeta;
5 Modifique el código en OnCreate() para mostrar los recursos de animación;
El análisis del código clave es el siguiente:
// //ImageView en main.xml
ImageView imagen de la nave espacial =(ImageView)findViewById(r . id . imagen de la nave espacial
//Cargando animación
Animación de salto hiperespacial =
Utilidades de animación cargar animación (this, r. anim. hyperspace_jump);
//Utiliza ImageView para mostrar la animación.
Imagen de la nave espacial. Iniciar animación (hyperspaceJumpAnimation);
Un breve análisis aquí es el siguiente:
AnimationUtils proporciona funciones para cargar animaciones, además de la función. loadAnimation() , otros se pueden encontrar en detalle en el SDK de Android.
La llamada animación es la transformación gráfica del contenido de la vista;
Aplicaciones de animación en Android (2)
Para resumir la esencia de la interpolación animación: la animación a intervalos logra efectos de animación al completar una serie de transformaciones gráficas (incluidas traducción, escala, rotación y cambio de transparencia) en el contenido de la vista. Específicamente, está predefinido un conjunto de instrucciones que especifican el tipo, el tiempo de activación y la duración de la transformación de gráficos. Estas instrucciones se pueden definir como archivos XML o código fuente. Los programas pueden lograr efectos de animación ejecutando estas instrucciones a lo largo de la línea de tiempo.
Aquí necesitamos analizar dos cuestiones en profundidad:
¿Cómo controlar el tiempo de ejecución de la animación?
El modo de ejecución de la animación.
¿Cómo controlar el funcionamiento de la animación?
También mencionamos este problema en la página anterior. Supongo que todos todavía están confundidos acerca de qué es un interpolador y cuál es su función. Aquí hay una explicación detallada primero. Según la explicación del interpolador en el SDK de Android: el interpolador define la tasa de cambio de una animación. Esto permite acelerar, desacelerar y repetir los efectos de animación básicos (alfa, escala, traducción, rotación).
Una comprensión simple es que el progreso de la animación está controlado por el interpolador. El interpolador define la velocidad de cambio de la animación, que puede lograr una velocidad uniforme, aceleración positiva, aceleración negativa, aceleración irregular, etc. Interpolator es una clase base que encapsula todos los métodos del interpolador. Tiene solo un método, getInterpolation (entrada flotante), que asigna un punto en la línea de tiempo a un multiplicador para aplicarlo a la transformación de la animación. Android proporciona varias subclases de interpolador que implementan diferentes curvas de velocidad, como se muestra a continuación:
Aceleración El interpolador de aceleración cambia lentamente al principio y en la introducción de la animación, y acelera en el medio.
AccelerateInterpolator cambia lentamente al comienzo de la animación y luego comienza a acelerar.
La animación del Interpolador en bucle se repite un número específico de veces, y la velocidad cambia a lo largo de una curva sinusoidal.
El interpolador de desaceleración cambia lentamente al comienzo de la animación y luego comienza a disminuir.
Los interpoladores lineales cambian a una velocidad uniforme durante la animación
Para LinearInterpolator, la velocidad de cambio es una constante, es decir, f (x) = x
Flotación pública point getInterpolation(entrada de punto flotante){
Devuelve entrada;
}
Varias otras subclases de interpoladores también implementan tasas de cambio de acuerdo con algoritmos específicos. También puede definir su propia subclase de interpolador para lograr efectos físicos como parábola y caída libre.
Modo de ejecución de animación
Hay dos modos de ejecución para la animación:
Modo exclusivo, es decir, el hilo principal del programa entra en un bucle y se actualiza continuamente. la pantalla de acuerdo con las instrucciones de la animación hasta que finalice la animación;
El modo de interrupción, es decir, sincronización de un solo subproceso, envía notificaciones al subproceso principal a intervalos regulares y el subproceso principal actualiza la pantalla después de recibir la notificación;
Notas adicionales: clase de conversión
p>Transformar matriz afín de registros. Cada vez que se activa la animación, la matriz original se operará una vez. El mapa de bits de la vista se puede multiplicar por esta matriz para implementar la operación correspondiente (rotación, traducción, escala, etc.). La clase Transformación encapsula la matriz y alfa. value, y tiene dos miembros importantes, uno es mMatrix y el otro es alpha. El diagrama de clases de transformación es el siguiente:
Breve descripción
La transformación gráfica se implementa mediante matrices afines. La transformación gráfica es el conocimiento básico en gráficos. En pocas palabras, cada transformación es una operación matricial. En Android, la clase Canvas contiene la matriz actual. Al llamar a Canvas. Drawbitmap (bmp, x, y, paint), Android primero realizará una operación matricial en bmp y luego mostrará el resultado de la operación en el lienzo.
De esta forma, el programador solo necesita modificar constantemente la matriz del lienzo y actualizar la pantalla, y los objetos en la vista continuarán sufriendo transformaciones gráficas para formar animaciones.
Aplicaciones de animación en Android (3)
Anteriormente presentamos la animación de interpolación en detalle. En esta sección, presentaré otra animación, la animación de fotogramas. Como se mencionó anteriormente, la animación de fotogramas es la reproducción secuencial de imágenes prediseñadas, similar a una película. A diferencia del paquete de animación, el SDK de Android proporciona otra clase AnimationDrawable para definir y utilizar la animación de fotogramas.
La animación de cuadros se puede definir en recursos XML (o almacenarse en la carpeta res/anim), o se puede definir mediante API en AnimationDrawable. Debido a que la animación de interpolación y la animación de fotogramas son muy diferentes, los formatos definidos por XML también son completamente diferentes. El formato es el siguiente: 1. El nodo raíz de la lista de animación contiene múltiples subnodos de elementos. Cada nodo de elemento define una animación de cuadro: los recursos dibujables del cuadro actual y la duración del cuadro actual. Los elementos del nodo se describen a continuación:
Descripción del atributo XML
El recurso dibujable al que hace referencia el marco actual.
Duración muestra el tiempo del fotograma actual en milisegundos.
Si oneshot es verdadero, significa que la animación solo se reproduce una vez y se detiene en el último fotograma; si se establece en falso, significa que la animación se reproduce en un bucle.
VariablePadding, si es verdadero, permite que el relleno del elemento de diseño cambie según el estado de selección actual.
Visible especifica la visibilidad inicial del dibujable, el valor predeterminado es flase
Demos un ejemplo XML específico para definir la animación cuadro por cuadro:
lt animación- Lista xmlns: Android = "/apk/RES/Android "
Android: one shot = " true " gt;
litem Android: drawable = " @drawable/ rocket_thrust 1 " Android: duración = " 200 "/ gt;
litem Android: draw able = " @ drawable/rocket_thrust 2 " Android: duración = " 200 "/ gt;
litem Android: drawable = "@drawable/rocket_thrust 3" Android: length = " 200 "/gt;
lt/animation-list gt;
La definición XML anterior Una animación de fotograma contiene tres fotogramas de animación. Las tres imágenes del dibujable se utilizan en tres fotogramas de animación: rocket_thrusts 1, rocket_thrusts 2, rocket_thrusts 3. La duración de la animación de cada fotograma es de 200 milisegundos.
Luego guardamos el XML anterior en la carpeta res/anim/ y le asignamos el nombre rocket_thrust.xml. El código de animación es el siguiente: Agregue el siguiente código en OnCreate():
. ImageView imagen del cohete =(ImageView)findViewById(r . id . rocket _ image);
imagen del cohete . establecer recurso de fondo (r . anim . rocket _ impulse
animación del cohete); = (animación dibujable)imagen del cohete. get background();
Finalmente, debes agregar código para iniciar la animación:
public boolean onTouchEvent(evento de evento de movimiento){ p>
if(event . get action()= = evento de movimiento. ACTION_DOWN) {
animación de cohete start();
Devuelve verdadero
}
Devuelve super.onTouchEvent (evento);
}
Todos deben conocer el resultado de la ejecución del código (las tres imágenes se reproducen una vez en secuencia ), pero hay una cosa que debe enfatizarse: el código que inicia la animación del cuadro del cohete Animation start(); no está en OnCreate(), porque AnimationDrawable en OnCreate() no está completamente vinculado a ImageView. Si inicia la animación en OnCreate(), solo podrá ver la primera imagen.
A continuación, echemos un vistazo a la introducción a AnimationDrawable en el SDK de Android para una breve introducción:
Animación dibujable
Obtener y configurar las propiedades de la animación.
Obtiene la duración de la animación.
Intgetnumberframes() obtiene el número de fotogramas de la animación.
Boolean isOneShot()
Void setOneShot(boolean oneshot)
Obtiene el atributo oneshot.
Establece el atributo oneshot.
void inflate(recurso r, Recursos dibujables.
Void add frame (marco dibujable, duración int) agrega un marco (recursos, duración) a la animación actual.
Control de animación
Void start() inicia la animación.
Void run() no puede descartar la llamada directamente; utilice start() en su lugar.
Boolean isRunning() ¿Se está ejecutando la animación actual?
Void stop() detiene la animación actual.
Breve descripción
La definición y el uso de la animación de cuadros son relativamente simples y se presentan en detalle aquí. Para más investigaciones, visite Android SDK para obtener más información. El SDK de Android también contiene muchos programas de muestra en esta área. Nota: El atributo interpolador no está definido en el archivo XML de la animación del cuadro porque no tiene sentido definirlo.