android - Infinite Auto Scroll ListView con Scroll Speed Controlled
autoscroll (2)
Aquí algunos consejos: Simular onFling () programáticamente en lugar de detectarlo (Android)
y Programmatic Fling ListView Android
Es difícil entender lo que se llama lo suficientemente suave en su caso. Por lo general, los problemas de suavidad están relacionados con un uso no óptimo de las vistas de lista y los problemas en los diseños de celdas o en la creación / reciclaje de vistas dentro del método getView de los adaptadores.
¿ Utiliza un marcador de posición ? Una cosa importante a considerar es también el uso de Drawables .
Nunca logré lo que buscabas, pero una idea simple que me viene a la mente es:
- Encuentra una manera de desplazar la vista de 1 posición o 2.
- Use un buffer de anillo dentro de su adaptador. Por ejemplo, digamos que tienes 100 artículos en tu lista de artículos. Luego, al principio, el elemento 0 de la vista de lista es el elemento 0 de su lista. Cuando la vista de lista se desplaza hacia arriba de 1 elemento, entonces el elemento 0 de la vista de lista debería convertirse en el elemento 1 de su lista. Por lo tanto, el problema no sería el desplazamiento, sino una mayor sincronización con el desplazamiento y la visualización de una lista interminable de elementos.
He estado trabajando en una idea de ListView
en la que se sigue desplazando automáticamente sin interacción del usuario y eso es absolutamente factible utilizando las API de Android, por ejemplo, smoothScrollToPositionFromTop .
He implementado ListView BaseAdapter
donde carga elementos para siempre (casi) para obtener un ListView
repetido que no se detiene.
Lo que quiero lograr aquí es mantener mi ListView
desplazándose para siempre con cierta velocidad (lenta) para que los elementos sean claros y legibles mientras se desplaza hacia abajo, aún no estoy seguro de si ListView
es mi mejor opción aquí.
A continuación se muestra un fragmento de lo que estoy tratando de hacer. El resultado es bueno de alguna manera, pero no es lo suficientemente suave, puedo sentir el parpadeo de ListView.
Necesito mejorar la suavidad, la eficiencia y controlar la velocidad.
new Thread(new Runnable() {
@Override
public void run() {
int listViewSize = mListView.getAdapter().getCount();
for (int index = 0; index < listViewSize ; index++) {
mListView.smoothScrollToPositionFromTop(mListViewA.getLastVisiblePosition() + 100, 0, 6000);
try {
// it helps scrolling to stay smooth as possible (by experiment)
Thread.sleep(60);
} catch (InterruptedException e) {
}
}
}
}).start();
Sugiero, que su adaptador implementado de manera efectiva. por lo que este código es solo scrolls viewview
Necesitas probar otros valores de variables.
final long totalScrollTime = Long.MAX_VALUE; //total scroll time. I think that 300 000 000 years is close enouth to infinity. if not enought you can restart timer in onFinish()
final int scrollPeriod = 20; // every 20 ms scoll will happened. smaller values for smoother
final int heightToScroll = 20; // will be scrolled to 20 px every time. smaller values for smoother scrolling
listView.post(new Runnable() {
@Override
public void run() {
new CountDownTimer(totalScrollTime, scrollPeriod ) {
public void onTick(long millisUntilFinished) {
listView.scrollBy(0, heightToScroll);
}
public void onFinish() {
//you can add code for restarting timer here
}
}.start();
}
});