34 votos

ImageView Android animación

He creado una presentación con una imagen de la vista y una vista de la web. La web está configurado para ver tiene un defecto de visibilidad del pasado. Cuando la actividad de los incendios de arriba muestra la imagen vista por primera vez y cuando la vista web se ha terminado de cargar su dirección url, se señala a sí mismo como visible y el imageview está marcado como oculto.

Cuando el imageview se muestra, me gustaría que gire repetidamente sólo por un pequeño añadido de dinamismo.

Nunca he hecho las animaciones antes en Android y todos los posts que he encontrado cuando he preguntado el internet no eran útiles; por lo tanto, he vuelto a MODO de ayuda.

Así que si voy a empezar con este...

    final ImageView splash = (ImageView)findViewById(R.id.splash);

¿Cómo crear una repetición girar animación y aplicar el ImageView?

Gracias de nuevo!

63voto

Christopher Orr Puntos 58514

Uso una RotateAnimation , establecer el punto de pivote en el centro de la imagen.

RotateAnimation anim = new RotateAnimation(0f, 350f, 15f, 15f);
anim.setInterpolator(new LinearInterpolator());
anim.setRepeatCount(Animation.INFINITE);
anim.setDuration(700);

// Start animating the image
final ImageView splash = (ImageView) findViewById(R.id.splash);
splash.startAnimation(anim);

// Later.. stop the animation
splash.setAnimation(null);

16voto

Steve Haley Puntos 26928

También puedes simplemente usar la rotación de la función de animación. Que se ejecuta una animación específicas, para una determinada cantidad de tiempo, en un ImageView.

Animation rotate = AnimationUtils.loadAnimation([context], R.anim.rotate_picture);
splash.startAnimation(rotate);

A continuación, crear una animación archivo XML en su res/anim llamado rotate_picture con el contenido:

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

    <rotate 
    android:fromDegrees="0"
    android:toDegrees="360"
    android:duration="5000"
    android:pivotX="50%"
    android:pivotY="50%">
</rotate>
</set>

Ahora, por desgracia, esto sólo se ejecute una vez. Usted necesitará un bucle en algún lugar para hacer que se repita la animación, mientras que está esperando. He experimentado un poco y tengo mi programa atrapado en un loop infinito, así que no estoy seguro de la mejor manera para que. EDIT: Christopher respuesta proporciona la información sobre cómo hacer que el bucle correctamente, por lo que la eliminación de mi mala sugerencia acerca de hilos separados!

12voto

Matt Puntos 83

Cómo girar una imagen alrededor de su centro:

ImageView view = ... //Initialize ImageView via FindViewById or programatically

RotateAnimation anim = new RotateAnimation(0.0f, 360.0f, Dimension.RelativeToSelf, 0.5f, Dimension.RelativeToSelf, 0.5f);

//Setup anim with desired properties
anim.setInterpolator(new LinearInterpolator());
anim.setRepeatCount(Animation.INFINITE); //Repeat animation indefinitely
anim.setDuration(700); //Put desired duration per anim cycle here, in milliseconds

//Start animation
view.startAnimation(anim); 
//Later on, use view.setAnimation(null) to stop it.

Esto hará que la imagen gire alrededor de su centro (0.5 o 50% de su anchura y altura). Les dejo esto para los lectores futuros que llegar aquí desde Google, ya que tengo, y que desea rotar la imagen alrededor de su centro sin definir dicho centro en absoluto píxeles.

8voto

Alex Volovoy Puntos 34562

Ida - split te imagen n rotándolo ligeramente cada vez. Yo diría que 5 es suficiente. crear algo como esto en drawable

<animation-list   android:id="@+id/handimation" android:oneshot="false" 
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/progress1" android:duration="150" />
    <item android:drawable="@drawable/progress2" android:duration="150" />
    <item android:drawable="@drawable/progress3" android:duration="150" />
 </animation-list> 

Inicio de código

progress.setVisibility(View.VISIBLE);
AnimationDrawable frameAnimation = (AnimationDrawable)progress.getDrawable();
frameAnimation.setCallback(progress);
frameAnimation.setVisible(true, true);

parada de código

AnimationDrawable frameAnimation = (AnimationDrawable)progress.getDrawable();
frameAnimation.stop();
frameAnimation.setCallback(null);
frameAnimation = null;
progress.setVisibility(View.GONE);

más aquí

5voto

Andrew Puntos 1675

Dentro del puesto de elemento:

android:repeatCount="infinite"

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X