/ / ScrollView sa pomaly posúva nahor - android, rolovanie, rolovanie

Posúvaním nahor ScrollView pomaly - android, posúvanie, scrollview

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ď č. 1

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