Pytanie brzmi „Jak przewinąć ScrollView do góry bardzo płynnie i powoli”.
W moim specjalnym przypadku muszę przewinąć do góry w ciągu 1-2 sekund. Próbowałem interpolować ręcznie za pomocą Handler (wywołanie scrollTo (0, y)), ale w ogóle nie działało.
Widziałem ten efekt na niektórych aplikacjach czytających książki, więc musi istnieć jakiś sposób, na pewno: D. (Tekst jest bardzo powoli przewijany w górę, aby kontynuować czytanie bez dotykania ekranu, wykonując dane wejściowe).
Odpowiedzi:
10 dla odpowiedzi № 1W ciągu 2 sekund przesuń widok przewijania do pozycji z 2000 roku
new CountDownTimer(2000, 20) {
public void onTick(long millisUntilFinished) {
scrollView.scrollTo(0, (int) (2000 - millisUntilFinished)); // from zero to 2000
}
public void onFinish() {
}
}.start();
26 dla odpowiedzi nr 2
Zrobiłem to za pomocą animatora obiektów (dostępny w API> = 3) i wygląda bardzo dobrze
Zdefiniuj ObjectAnimator:
final ObjectAnimator animScrollToTop = ObjectAnimator.ofInt(this, "scrollY", 0);
(this
odnosi się do klasy rozszerzającej system Android ScrollView
)
możesz ustawić jego czas trwania, jak chcesz:
animScrollToTop.setDuration(2000);
(2 sekundy)
P.s. Nie zapomnij rozpocząć animacji.
10 dla odpowiedzi nr 3
Spróbuj następującego kodu:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
{
ValueAnimator realSmoothScrollAnimation =
ValueAnimator.ofInt(parentScrollView.getScrollY(), targetScrollY);
realSmoothScrollAnimation.setDuration(500);
realSmoothScrollAnimation.addUpdateListener(new AnimatorUpdateListener()
{
@Override
public void onAnimationUpdate(ValueAnimator animation)
{
int scrollTo = (Integer) animation.getAnimatedValue();
parentScrollView.scrollTo(0, scrollTo);
}
});
realSmoothScrollAnimation.start();
}
else
{
parentScrollView.smoothScrollTo(0, targetScrollY);
}
5 dla odpowiedzi № 4
Czy próbowałeś smoothScrollTo(int x, int y)
? Możesz „ustawić parametr prędkości, ale może ta funkcja będzie odpowiednia dla Ciebie
0 dla odpowiedzi № 5
Możesz użyć klasy Timer i TimerTask. Możesz zrobić coś takiego
scrollTimer = new Timer();
scrollerSchedule = new TimerTask(){
@Override
public void run(){
runOnUiThread(SCROLL TO CODE GOES HERE);
}
};
scrollTimer.schedule(scrollerSchedule, 30, 30);