Otázkou je "Ako môžem prejsť nahor ScrollView na začiatok veľmi hladko a pomaly".
V mojom špeciálnom prípade musím prejsť na vrchol asi 1-2 sekundy. Snažil som sa interpolovať manuálne pomocou Handler (volanie scrollTo (0, y)), ale to nefungovalo vôbec.
Videl som tento efekt na niektoré aplikácie bookreader-u, takže musí existovať spôsob, ako si byť istý: D. (Text sa veľmi pomaly posúva nahor, aby pokračoval v čítaní bez dotyku na obrazovke, robí vstup).
odpovede:
10 pre odpoveď č. 1Po 2 sekundách presuňte zobrazenie rolovania do polohy 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 pre odpoveď č. 2
Urobil som to pomocou animátora objektu (k dispozícii v API> = 3) a vyzerá to veľmi dobre:
Definujte objekt ObjectAnimator:
final ObjectAnimator animScrollToTop = ObjectAnimator.ofInt(this, "scrollY", 0);
(this
odkazuje na triedu rozširujúcu Android ScrollView
)
môžete nastaviť dĺžku trvania:
animScrollToTop.setDuration(2000);
(2 sekundy)
P.s. Nezabudnite spustiť animáciu.
10 pre odpoveď č. 3
Vyskúšajte nasledujúci kód:
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 pre odpoveď č. 4
Skúsil si to smoothScrollTo(int x, int y)
? Môžete nastaviť parameter rýchlosti, ale táto funkcia bude pre vás v poriadku
0 pre odpoveď č. 5
Môžete použiť časovač Timer a TimerTask. Mohli by ste urobiť niečo také
scrollTimer = new Timer();
scrollerSchedule = new TimerTask(){
@Override
public void run(){
runOnUiThread(SCROLL TO CODE GOES HERE);
}
};
scrollTimer.schedule(scrollerSchedule, 30, 30);