Tôi đang cố sử dụng Scroller để di chuyển đến vị trí cố định. Vấn đề của tôi là: nó kết thúc ở vị trí chính xác, nhưng nó hoặc là chỉ chạy một lần và thiết lập vị trí kết thúc ngay lập tức hoặc cuộn rất chậm đầu tiên và sau đó nhảy đến cùng.Android Scroller fling đến vị trí cố định
EDIT: vấn đề có vẻ là a) vận tốc của tôi bằng không đôi khi (đó là vấn đề ở một nơi khác :)) và tôi phải kéo dài thời lượng sử dụng scroller.extendDuration()
. Tuy nhiên tôi không chắc chắn về những gì thời gian nên được. Tôi không thể tìm thấy thông tin về vận tốc nhất định thực sự có ý nghĩa gì. Có phải là pixel trên giây?
Dưới đây là mã của tôi:
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);
}
}
}
Cách tính toán vận tốc và bạn đang thực hiện chức năng cuộn này trên tương tác của người dùng, như di chuyển cảm ứng – Triode
Cách tính toán vận tốc và bạn cũng đang thực hiện chức năng cuộn này trên tương tác của người dùng. nếu đó là trường hợp thì tại sao bạn không thể sử dụng một số điều như thế này cuối cùng int delta = newX - getScrollX(); mScroller.startScroll (getScrollX(), 0, delta, 0, Math.abs (delta)); newX là vị trí hiện tại của chuột. Và bạn cũng có thể sử dụng trình theo dõi vận tốc để kiểm tra tốc độ di chuyển của cảm ứng. – Triode
Có Tôi đang sử dụng một VelocityTracker, nhưng tôi đã tìm ra vấn đề là gì (xem câu trả lời dưới đây). Cảm ơn! –