Въпросът е: "Как да превъртя 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);