Cambiar la posición de la vista después del final de la animación
Desarrollo un widget basado en ViewGroup
y mi problema es que necesito guardar la posición de los elementos después del final de la animación. Llamé setFillAfter(true)
en mi objeto de animación que creé AnimationListener
y en su método onAnimationEnd
llamada View.layout(l,t,r,b)
para establecer la posición después de la animación, porque quiero que la animación comience desde la posición del nuevo elemento la próxima vez . Pero en este caso parece que los artículos se han colocado dos veces. Si no utilizo View.layout(l,t,r,b)
al final de la animación, la siguiente animación comienza desde la posición anterior. Aquí está mi código:
private void scrollUp() { for(int i = 0; i < getChildCount(); i++) { final View child = getChildAt(i); final int index = i; final int newleft = child.getLeft() + mOffsetBetweenItems; final int newTop = child.getTop() - mOffsetBetweenItems; TranslateAnimation scrollUp = new TranslateAnimation(0, mOffsetBetweenItems, 0, -mOffsetBetweenItems); scrollUp.setDuration(1500); scrollUp.setFillAfter(true); scrollUp.setAnimationListener( new AnimationListener() { @Override public void onAnimationStart(Animation animation) {} @Override public void onAnimationRepeat(Animation animation) {} @Override public void onAnimationEnd(Animation animation) { child.layout(newleft, newTop, newleft + child.getMeasuredWidth(), newTop + child.getMeasuredHeight() ); } } ); child.startAnimation(scrollUp); } }
Por favor, dame un consejo ¿cómo debo restablecer la posición de la vista en consecuencia a la posición final de la animación?
- ¿Cómo puedo programar una animación circular rotatoria como esta (foto adjunta)? Androide
- Cómo animar rayas de pantalla completa moviéndose de izquierda a derecha
- Colapsar CardView dentro de RecyclerView al animar
- ¿Por qué SwitchPreference no muestra animación al cambiar de encendido a apagado y viceversa?
- Android: ¿Cómo crear el diseño de la cama en xml?
- Animar los elementos de GridView de Android
- ¿Cómo iniciar la animación inmediatamente después de onCreate?
- Lista de animaciones (animationDrawable) autostart
- ¿Cómo mantener múltiples capas de ImageViews y mantener su relación de aspecto basada en el más grande?
- Animación 3D Flip en android.support.v4.Fragment
- Android espera hasta que se complete la animación
- Android Game Development - Mover el teléfono
- Respetar la escala de duración del animador en la propia animación
Debe utilizar ObjectAnimator
, funciona desde el nivel API 11. Cambia la posición de la vista automática,
Aquí está el ejemplo
ObjectAnimator objectAnimator= ObjectAnimator.ofFloat(mContent_container, "translationX", startX, endX); objectAnimator.setDuration(1000); objectAnimator.start();
Gracias JUL por su respuesta
Si su aplicación no se encuentra el object animator
, cambiar el nivel de la API de Project -> properties -> Android
, que import android.animation.ObjectAnimator;
Lo hice. Aquí está el código:
private void scrollUp() { for(int i = 0; i < getChildCount(); i++) { final View child = getChildAt(i); final int index = i; final int newleft = child.getLeft() + mOffsetBetweenItems; final int newTop = child.getTop() - mOffsetBetweenItems; TranslateAnimation scrollUp = new TranslateAnimation(0, mOffsetBetweenItems, 0, -mOffsetBetweenItems); scrollUp.setDuration(1500); scrollUp.setFillEnabled(true); scrollUp.setAnimationListener( new AnimationListener() { @Override public void onAnimationStart(Animation animation) {} @Override public void onAnimationRepeat(Animation animation) {} @Override public void onAnimationEnd(Animation animation) { child.layout(newleft, newTop, newleft + child.getMeasuredWidth(), newTop + child.getMeasuredHeight() ); } } ); child.startAnimation(scrollUp); } }
Acaba de eliminar setFillAfter(true)
y escribir setFillEnabled(true)
lugar de. Pero en este caso no entiendo la lógica de setFillEnabled()
trabajo, ya que proporciona el comportamiento no se describe en la documentación.
Invierta su animación; Comience por dar a su vista una nueva posición y luego animar desde la posición antigua a la nueva posición.
- Se ha producido un error en el procesamiento de archivos, consulte los registros para obtener más detalles.
- Obtención de una JSONException: fin de la entrada en el carácter 0