Android traducir animación – mover permanentemente Ver a nueva posición usando AnimationListener

Tengo android traducir animación. Tengo un ImageView con la posición generada al azar (next1, next2). Estoy llamando vacío cada 3 segundos. Genera nueva posición de la vista y luego hacer animación y mover Ver a la posición de destino. La animación de traducción tiene AnimationListener implementada. Cuando la animación termina, muevo Ver permanentemente a la nueva posición (en OnAnimationEnd). Mi problema es que la posición de la animación no se corresponde con el ajuste de las posiciones de layoutParams. Cuando final de animación, hace saltar a una nueva posición, que está a unos 50-100 píxeles de distancia. Creo que las posiciones deben ser las mismas porque uso los mismos valores (next1, next2) en ambas situaciones. Por favor, ¿puede mostrarme el camino para encontrar sollution? Dibujo de la situación aquí aquí

FrameLayout.LayoutParams pozice_motyl = (FrameLayout.LayoutParams) pozadi_motyl.getLayoutParams(); TranslateAnimation anim = new TranslateAnimation(Animation.ABSOLUTE,pozice_motyl.leftMargin, Animation.ABSOLUTE, next1, Animation.ABSOLUTE, pozice_motyl.topMargin, Animation.ABSOLUTE, next2); anim.setDuration(1000); anim.setFillAfter(true); anim.setFillEnabled(true); anim.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(100, 100); layoutParams.leftMargin = (int)(next1); layoutParams.topMargin = (int)(next2); pozadi_motyl.setLayoutParams(layoutParams); } @Override public void onAnimationRepeat(Animation animation) { } }); pozadi_motyl.startAnimation(anim); 

Aquí está el diseño XML:

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/pozadi0" android:gravity="center_vertical" android:layout_gravity="center_vertical" android:background="@drawable/pozadi2" > <LinearLayout android:id="@+id/pozadi_motyl" android:layout_width="wrap_content" android:layout_height="wrap_content" > <ImageView android:id="@+id/obrazek_motyl" android:src="@drawable/motyl" android:layout_width="100dip" android:layout_height="100dip" /> </LinearLayout> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <RelativeLayout android:id="@+id/obrazek_pozadi0" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:id="@+id/zaba_obrazek0" android:src="@drawable/zaba_obrazek" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerInParent="true" /> </RelativeLayout> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" > <cz.zaba.Spojnice android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout> </FrameLayout> 

Normalmente prefiero trabajar con deltas en la animación de traducción, ya que evita mucha confusión.

Pruebe esto, ver si funciona para usted:

 TranslateAnimation anim = new TranslateAnimation(0, amountToMoveRight, 0, amountToMoveDown); anim.setDuration(1000); anim.setAnimationListener(new TranslateAnimation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { FrameLayout.LayoutParams params = (FrameLayout.LayoutParams)view.getLayoutParams(); params.topMargin += amountToMoveDown; params.leftMargin += amountToMoveRight; view.setLayoutParams(params); } }); view.startAnimation(anim); 

Asegúrese de hacer el valor de amountToMoveRight / amountToMoveDown final

Espero que esto ayude 🙂

Debería usar ViewPropertyAnimator . Esto anima la vista a su posición futura y no es necesario forzar parámetros de diseño en la vista una vez finalizada la animación. Y es bastante simple.

 myView.animate().x(50f).y(100f); myView.animate().translateX(pixelInScreen) 

Nota: Este píxel no es relativo a la vista. Este píxel es la posición del píxel en la pantalla.

Solo puedes hacer como

 myView.animate().y(0f);//to move to the top of the screen. 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.