Estoy usando a RotateAnimation
para rotar una imagen que estoy usando como un spinner cíclico personalizado en Android. Aquí está mi rotate_indefinitely.xml
archivo, que coloqué en res/anim/
:
<?xml version="1.0" encoding="UTF-8"?>
<rotate
xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="infinite"
android:duration="1200" />
Cuando aplico esto a mi ImageView
uso AndroidUtils.loadAnimation()
, ¡funciona muy bien!
spinner.startAnimation(
AnimationUtils.loadAnimation(activity, R.anim.rotate_indefinitely) );
El único problema es que la rotación de la imagen parece detenerse en la parte superior de cada ciclo.
En otras palabras, la imagen gira 360 grados, se detiene brevemente, luego gira 360 grados nuevamente, etc.
Sospecho que el problema es que la animación está usando un interpolador predeterminado como android:iterpolator="@android:anim/accelerate_interpolator"
( AccelerateInterpolator
), pero no sé cómo decirle que no interpole la animación.
¿Cómo puedo desactivar la interpolación (si ese es realmente el problema) para hacer que mi animación circule sin problemas?
También tuve este problema e intenté configurar el interpolador lineal en xml sin éxito. La solución que funcionó para mí fue crear la animación como RotateAnimation en código.
fuente
rotate.setFillAfter(true);
rotate.setRepeatCount(Animation.INFINITE);
Esto funciona bien
Para invertir la rotación:
fuente
Tal vez, algo como esto ayudará:
Por cierto, puedes rotar más de 360 como:
fuente
Intente usar
toDegrees="359"
ya que 360 ° y 0 ° son iguales.fuente
Prueba esto.
fuente
Objeto de rotación mediante programación.
// rotación en el sentido de las agujas del reloj :
// Rotación antihoraria:
view es objeto de su ImageView u otros widgets.
rotate.setRepeatCount (10); use para repetir su rotación.
500 es la duración de tu tiempo de animación.
fuente
¡Podar el elemento
<set>
que envolvió el elemento<rotate>
resuelve el problema!Gracias a Shalafi!
Entonces su Rotation_ccw.xml debería verse así:
fuente
No importa lo que intenté, no pude hacer que esto funcionara correctamente usando código (y setRotation) para una animación de rotación suave. Lo que terminé haciendo fue hacer que los cambios de grado fueran tan pequeños, que las pequeñas pausas son imperceptibles. Si no necesita hacer demasiadas rotaciones, el tiempo para ejecutar este ciclo es insignificante. El efecto es una rotación suave:
fuente
Como Hanry ha mencionado anteriormente, poner el revestimiento de iterpolator está bien. Pero si la rotación está dentro de un conjunto, debe poner android: shareInterpolator = "false" para que sea más fluido.
Si Sharedinterpolator no es falso, el código anterior da problemas técnicos.
fuente
Si está utilizando una animación de conjunto como yo, debe agregar la interpolación dentro de la etiqueta de conjunto:
Eso funcionó para mí.
fuente
En Kotlin:
fuente
¿Es posible que debido a que pases de 0 a 360, pases un poco más de tiempo en 0/360 de lo que esperas? Quizás establecido en Grados en 359 o 358.
fuente
Intente usar más de 360 para evitar reiniciar.
Yo uso 3600 en lugar de 360 y esto funciona bien para mí:
fuente
En Android, si desea animar un objeto y hacer que mueva un objeto de ubicación1 a ubicación2, la API de animación calcula las ubicaciones intermedias (interpolación) y luego pone en cola en el hilo principal las operaciones de movimiento apropiadas en los momentos apropiados usando un temporizador . Esto funciona bien, excepto que el hilo principal generalmente se usa para muchas otras cosas: pintar, abrir archivos, responder a las entradas del usuario, etc. Un temporizador en cola a menudo se puede retrasar. Los programas bien escritos siempre intentarán realizar tantas operaciones como sea posible en subprocesos en segundo plano (no principales), sin embargo, no siempre puede evitar usar el subproceso principal. Las operaciones que requieren que opere en un objeto UI siempre deben realizarse en el hilo principal. Además, muchas API canalizarán las operaciones al hilo principal como una forma de seguridad de hilo.
Las vistas se dibujan en el mismo hilo GUI que también se usa para toda la interacción del usuario.
Entonces, si necesita actualizar la GUI rápidamente o si el renderizado toma demasiado tiempo y afecta la experiencia del usuario, use SurfaceView.
Ejemplo de imagen de rotación:
actividad:
fuente
fuente