Ejemplo sencillo de Android Scroller
¿Puede alguien darme ejemplo simple sobre la clase Scroller? Según entiendo, encapsula el desplazamiento, así que necesito comenzar a calcular y después manualmente actualice ScrollView a nuevas posiciones. Así que solo intento
Scroller scroller = new Scroller(getApplicationContext()); scroller.startScroll(0, 0, 10, 10, 500); for (int i = 0; i < 100; i++) { Log.d("scroller", scroller.getCurrX()+" "+ scroller.getCurrY()); }
Todo lo que tengo en la salida es sólo ceros. ¿Dónde está mi error?
- Cómo detener el desplazamiento interno de WebView en Android?
- Ocultar / Mostrar la barra de acciones más suavemente?
- Android: onScrollStateChanged SCROLL_STATE_IDLE a veces no se dispara
- Clase Android ImageViewer que admite Pinch-Zoom y desplazamiento
- Configuración de la posición de desplazamiento de ListView bien en Android
- Android se desplaza hasta la parte inferior de una vista de lista
- Desplazamiento de imagen enriquecido y zoom en android
- Android View deja de recibir eventos táctiles cuando el padre se desplaza
- Androide. Desplazamiento de 2 vistas de lista
- Desplazamiento horizontal automático de Android TextView
- Crear un RecyclerView con desplazamiento horizontal y vertical
- Desplácese dentro de un EditText que está en un ScrollView
- WebView en Galería deteniendo eventos de desplazamiento / toque
private class Flinger implements Runnable { private final Scroller scroller; private int lastX = 0; Flinger() { scroller = new Scroller(getActivity()); } void start(int initialVelocity) { int initialX = scrollingView.getScrollX(); int maxX = Integer.MAX_VALUE; // or some appropriate max value in your code scroller.fling(initialX, 0, initialVelocity, 0, 0, maxX, 0, 10); Log.i(TAG, "starting fling at " + initialX + ", velocity is " + initialVelocity + ""); lastX = initialX; getView().post(this); } public void run() { if (scroller.isFinished()) { Log.i(TAG, "scroller is finished, done with fling"); return; } boolean more = scroller.computeScrollOffset(); int x = scroller.getCurrX(); int diff = lastX - x; if (diff != 0) { scrollingView.scrollBy(diff, 0); lastX = x; } if (more) { getView().post(this); } } boolean isFlinging() { return !scroller.isFinished(); } void forceFinished() { if (!scroller.isFinished()) { scroller.forceFinished(true); } } }
El último parámetro en startScroll()
es la duración. Probablemente su for
-loop termina antes de que el scroller haga algo 🙂 Y también debe llamar a computeScrollOffset()
Pruebe este código, funciona:
Scroller scroller = new Scroller(getApplicationContext()); scroller.startScroll(0, 0, 100, 100, 500); while (!scroller.isFinished()) { Log.d("scroller", scroller.getCurrX() + " " + scroller.getCurrY()); scroller.computeScrollOffset(); }
- Mover la aplicación al teléfono
- Unidad de prueba de Android con ActivityUnitTestCase y PreferenceManager