有人能给我一些关于Scroller类的简单例子吗?据我所知,它封装了滚动,所以我需要开始计算,然后手动更新必须ScrollView到新的位置。所以我试试
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());
}
我输出的所有内容都只是零。我的错误在哪里?
答案 0 :(得分:7)
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);
}
}
}
答案 1 :(得分:3)
startScroll()
中的最后一个参数是持续时间。
可能你的for
- 循环在滚动器完成任务之前完成:)
你也应该致电computeScrollOffset()
试试这段代码吧:
Scroller scroller = new Scroller(getApplicationContext());
scroller.startScroll(0, 0, 100, 100, 500);
while (!scroller.isFinished()) {
Log.d("scroller", scroller.getCurrX() + " " + scroller.getCurrY());
scroller.computeScrollOffset();
}