Tengo una vista de OpenGL ES en Android que está controlada por una matriz para la traducción. Estoy tratando de encontrar una manera de obtener un toque de desplazamiento de impulso como se ve en la aplicación Google Maps o el iPhone. Gracias.desplazamiento suave/scroll inercial/impulso scroll
Respuesta
Si su problema es en 2D, es bastante simple
- que necesita para obtener el tiempo transcurrido en cada cuadro
Su onTouch función encontrará la aceleración de su dedo. Olvidé la fórmula sobre cómo obtener la aceleración desde la distancia. Debería ser la segunda derivada de posición con una variable de tiempo. Pero siempre debes convertir tu deltaX, deltaY en aceleración. Para hacerlo más fácil, no necesitas poner algo preciso allí. Editar: No sé por qué no lo vi, pero la función estaba allí ...
acceleration.x = 2 (newposition.x - position.x - speed.x * elapsedTime)/(elapsedTime * tiempo transcurrido);
Una vez que tenga su aceleración, puede establecer su nueva posición con ese código. Esta es una dinámica física simple en 2d. Con su aceleración puede encontrar su velocidad y con su velocidad puede encontrar su siguiente posición.
speed.x = (float) (mass * acceleration.x * elapsed + speed.x); speed.y = (float) (mass * acceleration.y * elapsed + speed.y); position.x += mass * acceleration.x/2 * elapsed * elapsed + speed.x * elapsed; position.y += mass * acceleration.y/2 * elapsed * elapsed + speed.y * elapsed; speed.x *= friction; speed.y *= friction;
misa y la fricción le permitirá definir qué tan rápido se va y la rapidez con que se ralentizará por sí mismo. Probablemente tendrá que ajustar el código porque esta dinámica no es exactamente buena si tiene que desplazarse hacia atrás para reducir la velocidad.
Al final de cada cuadro, tendrá que restablecer su aceleración a (0,0). Y en cada nuevo fotograma después de un toque par, la aceleración debe configurarse en algo. Debería funcionar muy bien :)
- Mida la velocidad a la que se desplaza la vista.
- Detecta cuando el usuario deja de desplazarse.
- Disminuya gradualmente la velocidad a la que se desplaza la vista de desplazamiento.
Algo como esto:
public void redraw() {
myScrollView.ySpeed = myScrollView.lastY-myScrollView.y;
myScrollView.xSpeed = myScrollView.lastX-myScrollView.x;
if (!userIsScrolling && ySpeed > 0) {
ySpeed--;
}
if (!userIsScrolling && xSpeed > 0) {
xSpeed--;
}
myScrollView.lastY = myScrollView.y;
myScrollView.y += ySpeed;
myScrollView.lastX = myScrollView.x;
myScrollView.x += xSpeed;
}
public void userStoppedScrolling() {
userIsScrolling = false;
}
gracias, ¿sabe exactamente cómo podría controlar la velocidad a la que el usuario está desplazándose? En este momento solo calcula el delta entre la posición inicial y la posición final del dedo del usuario y luego lo coloca en la matriz. – jfisk
Lo siento, no conozco Android lo suficiente como para ayudar con detalles como la ubicación táctil y tal. – Jumhyn
- 1. Android Scroll Pagination
- 2. Jquery Nice scroll no funciona
- 3. jQuery Parallax/Scroll Events Rendimiento
- 4. ListView get scroll position?
- 5. GridView con scroll horizontal
- 6. Moving Div with Scroll
- 7. Desactivar Carbon Emacs scroll beep
- 8. Java trackpad 2-finger scroll listener
- 9. Can NSScrollView scroll if setHasHorizontalScroller: ¿NO?
- 10. ¿Hay un selector CSS: visible (scroll)?
- 11. TVirtualStringTree y vertical Scroll no funciona correctamente
- 12. CSS: overflow-y: scroll; desbordamiento-x: Visible
- 13. scroll rápido custom thumb
- 14. jQuery-autocomplete scroll issue
- 15. Fading Element on Scroll
- 16. DIV auto scroll
- 17. UITableView scroll direction
- 18. javascript scroll event para iPhone/iPad?
- 19. deshabilitar scroll horizontal en la web móvil
- 20. jQuery Infinite Scroll: el evento se dispara varias veces cuando el desplazamiento es rápido
- 21. deshabilitando el desplazamiento animoso solo para html pero manteniendo para elementos con overflow: scroll
- 22. Explicando la necesidad de evitar scroll horizontal
- 23. NSScrollView infinite/scroll sin fin | subview reuse
- 24. Desplazamiento horizontal?
- 25. evento 'scroll' que no se activa en CompositeView
- 26. Modal box en iPhone no scroll
- 27. Bing de búsqueda de imágenes de paginación - scroll infinito
- 28. JQuery Detect Scroll at Bottom
- 29. reiniciar TextView scroll to top
- 30. jQuery Infinite Scroll y Gridview
Estaba mirando su respuesta y me pregunto cómo obtendrá velocidad para usar en aceleración cuando su fórmula de velocidad requiera aceleración ... ¿Una depende y requiere la otra? – Dan
En lugar de calcular la velocidad directamente, puede dar mejores resultados para usar la aceleración. La velocidad inicial y la aceleración son 0. Por lo tanto, debe guardar la velocidad en algún lugar para agregarla al siguiente cuadro. La aceleración no es más que el cambio entre cada cuadro. La aceleración podría ser deltaX, deltaY. La velocidad real será esa deltaX * elapsedTime + lastSpeed. De esta manera, la velocidad se calcula correctamente, incluso si un cuadro toma mucho tiempo o una pequeña cantidad de tiempo. Otros parámetros falsifican un poco de físico para agregar la inercia y la fricción. Realmente no quieres que se desplace para siempre. –