Encuentra ángulo y velocidad para el evento de toque de usuario alrededor de un círculo en Android

Las matemáticas han venido de nuevo en mi camino y me han derrotado. Necesito tu ayuda para reagruparme y atacar de nuevo.

Lo que tengo:

Introduzca aquí la descripción de la imagen

Tengo una vista de superficie y un círculo como un mapa de bits. Necesito girar el mapa de bits como el usuario mueve el dedo alrededor del borde del círculo. Cuanto más rápido se desliza el usuario, más necesito girar la imagen. Parece simple pero no muy fácil de implementar.

Lo que necesito

Necesito calcular el ángulo en el que girar la imagen en el evento onDraw. Por lo que he pensado hasta ahora, necesito dos cosas: – el ángulo entre el nuevo punto tocado y el viejo. He hecho una función simple que se encarga de esto:

private int getAngleBetweenTwoTouchedPoints(double oldX, double oldY, double newX, double newY) { return (int) Math.abs(Math.atan2(newY - oldY, newX - oldX)); } 

El ángulo devuelto por este varía de 0 a 1 y creo que es correcto. Al incrementar el ángulo de la matriz de rotación de la imagen por este valor obtengo una rotación lenta, básicamente en 1 unidad. Por lo tanto, hay una oportunidad de trabajar, pero no está bien todavía. – Por lo tanto, la segunda cosa que puede necesitar es la velocidad con la que el usuario desliza el dedo alrededor de la pantalla. Así que básicamente algo como esto:

RotationAngle + = angleBetweenTouches + velocidad

Velocidad o velocidad como lo vi nombrada es el problema en mi caso, teniendo en cuenta que no me muevo sólo en X o Y sino alrededor del círculo. No tengo ni idea de cómo calcularlo. Vi VelocityTracker en la ayuda de Android, pero no sé cómo podría ayudar.

Por lo tanto, para recapitular: Necesito poder girar la imagen a medida que el usuario mueve el dedo alrededor del borde de la imagen. Incluso más simple, cuando el usuario deja de deslizarse, el píxel de la imagen que estaba debajo del dedo en el arranque de la diapositiva debe ser el mismo cuando la diapositiva se detiene.

Cualquier ayuda es muy apreciada. Gracias

Sospecho que dado "Incluso más simple, cuando el usuario deja de deslizarse, el píxel de la imagen que estaba por debajo del dedo en el arranque de la diapositiva debe ser el mismo cuando la diapositiva se detiene.", Lo que podría ser mejor es rotaciones absolutas en lugar de Relativos.

Incrementar la rotación con cada evento puede acumular errores que conducen a que el mapa de bits no aparezca "pegado" al dedo.

Si solo realiza un seguimiento del evento inicial y del último evento, entonces siempre cambie de la vista inicial a la apropiada para el último evento, su código será más simple (evitando la velocidad) y se comportará mejor.

Tuve la misma tarea pero con un propósito diferente con ángulos. Espero que este enlace pueda darte alguna pista http://www.andengine.org/forums/post9226.html#p9226

¿Por diferencia de tiempo trataste de obtener getTime () de la clase Date entre dos clics diferentes?

Espero que esto te dé una idea.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.