5
我正在嘗試使用Scroller投擲到固定位置。我的問題是:它結束了正確的位置,但它只是運行一次,立即設置結束位置,或者先滾動非常緩慢,然後跳轉到結尾。Android Scroller投擲到固定位置
編輯:問題似乎是:a)我的速度有時爲零(這是其他地方的問題:)),我必須使用scroller.extendDuration()
來延長持續時間。但是我不確定持續時間應該是多少。我無法找到有關特定速度實際意義的信息。它是每秒像素嗎?
這裏是我的代碼:
private class Flinger implements Runnable {
private final Scroller scroller;
private int lastX = 0;
public Flinger() {
scroller = new Scroller(getContext());
}
void startFling(int initialVelocity, int offsetX) {
Log.d("test", "finalX = " + offsetX);
if (offsetX > 0) {
scroller.fling(0, 0, initialVelocity, 0, 0, Integer.MAX_VALUE, 0, 0);
scroller.setFinalX(offsetX);
lastX = 0;
} else {
scroller.fling(getWidth(), 0, initialVelocity, 0, 0, Integer.MAX_VALUE, 0, 0);
scroller.setFinalX(getWidth() + offsetX);
lastX = getWidth();
}
post(this);
}
@Override
public void run() {
if (scroller.isFinished()) {
Log.d("test", "scroller finished");
return;
}
boolean more = scroller.computeScrollOffset();
int x = scroller.getCurrX();
int diff = lastX - x;
Log.d("test", "isFlinging, x=" + x + ", diff=" + diff + ", leftOffset=" + getLeftOffset() + ", isDone=" + !more);
if (diff != 0) {
setLeftOffset(getLeftOffset() - diff);
lastX = x;
}
if (more) {
post(this);
}
}
}
你是如何計算速度的,也是你在做用戶交互的滾動功能,比如觸摸移動 – Triode 2012-04-12 11:50:10
你是如何計算速度的,你是否在做這個滾動功能的用戶交互,比如觸摸移動如果是這樣的話,那麼爲什麼你不能使用這樣的東西呢? final int delta = newX - getScrollX(); mScroller.startScroll(getScrollX(),0,delta,0,Math.abs(delta)); newX是當前鼠標位置。還可以使用速度跟蹤器來檢查觸摸移動速度。 – Triode 2012-04-12 12:00:25
是的,我正在使用VelocityTracker,但我已經找出問題所在(請參閱下面的答案)。謝謝! – 2012-04-12 12:51:29