2011-09-02 28 views
17

He hecho con éxito una animación lateral usando Translate Animation significa que la imagen va de arriba a abajo. Aquí está el código:¿Cómo se mueve la imagen hacia arriba y hacia abajo de forma continua utilizando translate animation en android?

private ImageView mScanner; 
private Animation mAnimation; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    mScanner = (ImageView)findViewById(R.id.Scanner); 

    mAnimation = new TranslateAnimation(0, 0, 0, 500); 
    mAnimation.setDuration(10000); 
    mAnimation.setFillAfter(true); 
    mAnimation.setRepeatCount(-1); 
    mAnimation.setRepeatMode(Animation.REVERSE); 
    mScanner.setAnimation(mAnimation); 
    mScanner.setVisibility(View.VISIBLE); 
} 

Ahora quiero que cuando la imagen llegue al final de la pantalla, comience a moverse nuevamente hacia arriba. ¿Cómo puedo hacer eso?

Nota: Hecho en el modo inverso. Por favor mira el código. Pero ahora el problema es que deja líneas cuando se mueve de abajo hacia arriba. Al igual que la imagen adjunta. ¿Cómo eliminar estas líneas? screenshot

+0

Ver mi solución: http://stackoverflow.com/a/38934624/2535875 –

Respuesta

33

modificar el código de acuerdo con esto:

mScanner.setVisibility(View.VISIBLE); 
    mAnimation = new TranslateAnimation(
      TranslateAnimation.ABSOLUTE, 0f, 
      TranslateAnimation.ABSOLUTE, 0f, 
      TranslateAnimation.RELATIVE_TO_PARENT, 0f, 
      TranslateAnimation.RELATIVE_TO_PARENT, 1.0f); 
    mAnimation.setDuration(10000); 
    mAnimation.setRepeatCount(-1); 
    mAnimation.setRepeatMode(Animation.REVERSE); 
    mAnimation.setInterpolator(new LinearInterpolator()); 
    mScanner.setAnimation(mAnimation); 

y utilizar además XML en lugar de la imagen. Por favor, vea el siguiente código y colóquelo en su ImageView src.

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="line"> 
    <solid android:color="#0000FF"/> 
    <size android:width="480dp" 
     android:height="10dp"/> 
    <corners android:radius="1dp"/> 
    <stroke android:width="3dp" 
     android:color="#000000"/> 
</shape> 

Espero que te ayude.

+1

Perfecto. Incluí el xml y eliminé 'mAnimation.setFillAfter (true);' la línea y funcionó como yo quería. Gracias por la ayuda. –

+1

Oye tu código no funciona en 2.3.6. – sandy

+0

@sandy Revisé este código de 2.1 a 4.2 y funciona en todos mis dispositivos. Por favor, no intente utilizar la imagen ya que tenía problemas con la imagen y luego usé la línea creada basada en 'XML' como reemplazo de la imagen utilizada en el proyecto. Por favor, revise su código y pruebe una vez más. Gracias –

2

Creo que tiene que eliminar mAnimation.setFillAfter(true); porque esto significa que permanecerá permanentemente donde se detiene.

Para volver a la posición inicial, o bien puede hacer una animación completa para mover hacia arriba y hacia abajo, o hacer dos por separado y cuando termine el primer, luego inicie el segundo, aunque no hay razón para seguir Tremendo acercamiento.

+0

He hecho lo que quiero pero ahora estoy obteniendo el nuevo problema al que he adjuntado una imagen. He actualizado mi pregunta. Por favor échale un vistazo. Gracias –

7

Tiene que establecer la propiedad de repetición

androide: REPEATMODE

int. Cómo se comporta una animación cuando llega al final de la animación. android: repeatCount se debe establecer en un entero positivo o "-1" para que este atributo tenga un efecto. Seleccione "revertir" para hacer que la animación cambie de dirección con cada iteración o "repetir" para tener el ciclo de animación desde el principio cada vez.

Animation a; 
a.setRepeatMode(Animation.REVERSE); 
+0

funciona, pero dejar una línea cuando se mueve en sentido inverso significa de abajo hacia arriba. Cómo eliminar esta línea para que parezca que está escaneando. He actualizado mi código y también adjunto la imagen. Gracias –

Cuestiones relacionadas