/ / Скролирайте нагоре ScrollView бавно - Android, превъртете, scrollview

Превъртете нагоре ScrollView бавно - Android, превъртете, scrollview

Въпросът е: "Как да превъртя ScrollView на върха много гладко и бавно".

В моя специален случай трябва да преминете нагоре за около 1-2 секунди. Опитах се да интерполирам ръчно с помощта на Handler (наричайки scrollTo (0, y)), но това не работи изобщо.

Видях този ефект върху някои приложения за книги, така че трябва да има начин, уверете се, че: D. (Текстът бавно се превърта, за да продължите да четете, без да докосвате екрана, като правите вход).

Отговори:

10 за отговор № 1

За 2 секунди преместете изгледа за превъртане на позиция 2000

new CountDownTimer(2000, 20) {

public void onTick(long millisUntilFinished) {
scrollView.scrollTo(0, (int) (2000 - millisUntilFinished)); // from zero to 2000
}

public void onFinish() {
}

}.start();

26 за отговор № 2

Направих го с помощта на обект аниматор (Наличен в API> = 3) и изглежда много добре:

Определяне на ObjectAnimator: final ObjectAnimator animScrollToTop = ObjectAnimator.ofInt(this, "scrollY", 0);

(this се отнася до класа, разширяващ Android ScrollView)

можете да зададете продължителността му, както желаете:

animScrollToTop.setDuration(2000); (2 секунди)

Послепис Не забравяйте да започнете анимацията.


10 за отговор № 3

Опитайте следния код:

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 за отговор № 4

Опитвали ли сте се smoothScrollTo(int x, int y)? Не можете да настроите параметъра за скорост, но може би тази функция ще бъде добре за вас


0 за отговор № 5

Можете да използвате класовете Timer и TimerTask. Можете да направите нещо подобно

scrollTimer = new Timer();
scrollerSchedule = new TimerTask(){
@Override
public void run(){
runOnUiThread(SCROLL TO CODE GOES HERE);
}
};
scrollTimer.schedule(scrollerSchedule, 30, 30);