11

Can anyone gives me simple example about Scroller class? As I understand, it encapsulates scrolling, so I need start calculating and then manually update must ScrollView to new positions. So I just try

 Scroller scroller = new Scroller(getApplicationContext()); scroller.startScroll(0, 0, 10, 10, 500); for (int i = 0; i < 100; i++) { Log.d("scroller", scroller.getCurrX()+" "+ scroller.getCurrY()); } 

All I have in output is just zeros. Where is my mistake?

3

2 Answers 2

10
private class Flinger implements Runnable { private final Scroller scroller; private int lastX = 0; Flinger() { scroller = new Scroller(getActivity()); } void start(int initialVelocity) { int initialX = scrollingView.getScrollX(); int maxX = Integer.MAX_VALUE; // or some appropriate max value in your code scroller.fling(initialX, 0, initialVelocity, 0, 0, maxX, 0, 10); Log.i(TAG, "starting fling at " + initialX + ", velocity is " + initialVelocity + ""); lastX = initialX; getView().post(this); } public void run() { if (scroller.isFinished()) { Log.i(TAG, "scroller is finished, done with fling"); return; } boolean more = scroller.computeScrollOffset(); int x = scroller.getCurrX(); int diff = lastX - x; if (diff != 0) { scrollingView.scrollBy(diff, 0); lastX = x; } if (more) { getView().post(this); } } boolean isFlinging() { return !scroller.isFinished(); } void forceFinished() { if (!scroller.isFinished()) { scroller.forceFinished(true); } } } 

Taken from https://stackoverflow.com/a/6219382/1351347

Sign up to request clarification or add additional context in comments.

Comments

5

Last parameter in startScroll() is duration. Probably your for-loop finishes before the scroller gets anything done :) And also you should call computeScrollOffset() Try this code, it works:

Scroller scroller = new Scroller(getApplicationContext()); scroller.startScroll(0, 0, 100, 100, 500); while (!scroller.isFinished()) { Log.d("scroller", scroller.getCurrX() + " " + scroller.getCurrY()); scroller.computeScrollOffset(); } 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.