Sembra essere un problema con la durata richiesta per terminare l'animazione, lo stesso problema è presente con smoothScrollBy (int distance, int duration), a colpo d'occhio scorciatoie, smoothScrollToPosition() è un involucro amichevole intorno smoothScrollBy() smoothScrollBy() a sua volta sta simulando un "gesto di lancio", come se un utente avesse fatto il movimento
smoothScrollBy posta davvero solo il runnable di lanci che continua a ripubblicarsi fino a che la durata non viene eseguita Out. Significa che calcola semplicemente l'offset di scorrimento richiesto in base all'offset su cui aveva deciso di spostarsi, quindi se la durata si esaurisce prima che arrivi all'offset target, si arresta all'ultimo offset calcolato (piuttosto che tutto il salto improvviso). all'offset target, che è perhap s più sconcertante in quanto non sarebbe animato).
La difficoltà per i ragazzi Android è determinare quanto spostare ciascuna chiamata run() per raggiungere l'offset richiesto perché le celle ListView (bambini) sono completamente dinamiche in altezza, quindi non possono semplicemente eseguire un calcolo a distanza semplice poiché l'altezza dei bambini non visibili è sconosciuta a loro. È lo stesso motivo per cui la barra di scorrimento Android può fluttuare di dimensioni mentre si scorre, deve fare una stima migliore di quanto dovrebbe essere grande in base a ciò che sta attualmente vedendo.
In ogni caso, che non aiuta a risolverlo, ma qualcuno potrebbe trovare interessante :)
Se sai di avere l'altezza delle celle statiche tuttavia, è possibile scrivere il proprio metodo per calcolare la distanza e la durata di passare per smoothScrollBy() e avere una quantità di tempo statica per spostare la distanza X. In caso contrario, sarà necessario utilizzare la soluzione bigstones pubblicata, che funziona davvero a causa dell'elevata SCROLL_DURATION di 1000 ms. Puoi prendere la versione di ICS e cambiare questo attributo, piuttosto che usare la versione 2.2, che non è la causa principale.
È anche possibile adattare questi runnables con il proprio algoritmo personalizzato, non dovrebbe essere troppo difficile modificare le cose.
fonte
2012-09-14 05:24:43
Ho lo stesso problema. http://code.google.com/p/android/issues/detail?id=37278 – bigstones
Ho postato lì una soluzione alternativa. – bigstones
Sembra risolto in Jellybean. –