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?
- ¿Por qué SwitchPreference no muestra animación al cambiar de encendido a apagado y viceversa?
- Android - E / Surface: queueBuffer: buffer de cola de errores en SurfaceTexture, -22 crash
- Android RecyclerView desplazamiento suave para ver que está animando su altura
- Elemento compartido animación entre RecyclerView elemento y CollapsingToolbar dentro de la misma actividad
- Botón en ViewPager desplazarse a la página específica
- Ejecución Animación y conmutador de imágenes al mismo tiempo
- Repetir la animación de Android
- Nombre de animación desconocido: decelerateInterpolator
- Eliminación de elemento de lista similar a la notificación en diapositiva en Android
- Android arrastrar y volver a la actividad anterior como Facebook y Google Fotos
- Rotar una imagen con animación
- LayoutTransition no funciona en el método Adding view onActivityResult ()
- ImageView amplía la animación corta la imagen
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