Android – Artefactos utilizando Animación
Tengo un problema con los artefactos visuales en la pantalla cuando se aplica la transformación 3D que se encuentra aquí . He cambiado esto por lo que gira alrededor del eje x en lugar de la y. Cuando hago una rotación completa de 180 (la parte superior se aleja de usted al principio) estoy obteniendo artefactos de una sola línea de píxel en el área inferior (10-20% inferior) de cada otra vista a la que se aplica. Estoy utilizando un selector como el fondo de un LinearLayout y luego aplicar esta animación a ella. ¿Puede alguien pensar en una solución rápida a este problema?
¡Gracias por cualquier ayuda!
- Animar las dimensiones superior e inferior de una vista
- Animación de rotación de Android con ScrollView
- Animación de una vista mientras que ListView no está funcionando
- Crear animación cambiando la imagen en ImageView con Timer (o Handler)
- Android - Arrastrar y soltar - Animación sombra a destino
- TranslateAnimación aplicada a un ImageView deja rastro
- Cómo hacer una animación fluida líquido en Android
- Ampliar la animación
- ¿Cómo se suelta un pin en un MapView en Android?
- como puedo parar la animacion
- ¿Hay una manera de escuchar el final de la animación en AnimatedVectorDrawables
- Android - Flip Animation no se mueve sin problemas
- Android: ¿Cómo iniciar una animación infinita aplicada en un ImageView después de la actividad con la vista animada se ha reanudado?
Resulta que sólo tienes que invalidar la vista principal en cada paso de animación. Si tiene un objeto de animación personalizado, puede hacer esto dentro de Animation.applyTransformation (…)
Tuve un problema similar con una animación 2D donde una vista se mueve fuera de la pantalla (fuera de la vista de los padres). Mi solución fue bastante simple. En mi vista personalizada simplemente invalido la vista de los padres para que se vuelva a dibujar en cada fotograma.
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); ((View) this.getParent()).invalidate(); canvas.drawBitmap(icon, bm_x, bm_y, mPaint); }