/ / Przewiń w górę Przewiń Powoli - android, przewiń, przewiń widok

Przewiń w górę Przewiń widok powoli - android, przewiń, przewiń widok

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 № 1

W 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);