Scroller를 사용하여 고정 위치로 이동하려고합니다. 내 문제는 : 그것은 올바른 위치에 끝나지 만 그냥 한 번 실행하고 끝 위치를 즉시 설정하거나 매우 느리게 스크롤 한 다음 끝까지 이동합니다.Android Scroller 고정 위치로 이동
편집 : 문제는) 내 속도가 때때로 제로 (즉, 다른 곳에서 문제입니다 :)) 인 것 같다 내가 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
속도를 계산하는 방법과 터치 동작과 같은 사용자 상호 작용에서이 스크롤 기능을 수행하고 있습니까? 그렇다면 왜 이런 것을 사용할 수 없는지 final int delta = newX - getScrollX(); mScroller.startScroll (getScrollX(), 0, delta, 0, Math.abs (delta)); newX는 현재 마우스를 위로 향하게합니다. 또한 속도 추적기를 사용하여 터치 이동 속도를 확인할 수 있습니다. – Triode
예 VelocityTracker를 사용하고 있지만 문제가 무엇인지 알아 냈습니다 (아래 답변 참조). 감사! –