gpt4 book ai didi

Android Scroller 飞向固定位置

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:07:13 26 4
gpt4 key购买 nike

我正在尝试使用 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);
}
}
}

最佳答案

好的,我知道了。事实上,我不得不延长我的持续时间(但是文档有点误导 - 它不是添加到当前计算的持续时间的值,而是实际的新持续时间)。

阅读更多文档后,我意识到所需的速度确实是每秒像素数,而且我实际上已经定义了 VelocityTracker 来使用该单位。

所以这是缺少的行:

scroller.extendDuration((int) (Math.abs(offsetX) / (float) Math.max(1000, Math.abs(initialVelocity)) * 1000));

关于Android Scroller 飞向固定位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10122144/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com