我有一个卷轴是用来狂欢的。我用一个初始速度和一些限制来初始化它。当我稍后获得新的Y值时,getCurrY返回传递到fling中的Y限制。
以下是高度简化的代码:
public class SimpleList extends ScrollView implements Runnable
{
private VelocityTracker velocityTracker = null; // initialization redacted
private Scroller scroller = null;
@Override
public boolean onTouchEvent(MotionEvent ev)
{
final int action = ev.getAction();
switch (action & MotionEvent.ACTION_MASK)
{
case MotionEvent.ACTION_DOWN:
velocityTracker.addMovement (ev);
return true;
case MotionEvent.ACTION_MOVE:
{
velocityTracker.addMovement (ev);
return true;
}
case MotionEvent.ACTION_UP:
velocityTracker.computeCurrentVelocity (1000);
int index = ev.getActionIndex();
int pointerId = ev.getPointerId(index);
int velY = (int) VelocityTrackerCompat.getYVelocity (velocityTracker, pointerId);
velocityTracker.recycle();
scroller = new Scroller (getContext());
scroller.fling (0, 0, 0, velY,
Integer.MIN_VALUE, Integer.MIN_VALUE,
Integer.MAX_VALUE, Integer.MAX_VALUE);
postDelayed (this, 100);
return true;
}
return false;
}
public void run()
{
if (scroller.isFinished())
return;
if (scroller.computeScrollOffset())
{
System.out.println ("curVel " + scroller.getCurrVelocity());
System.out.println ("newY " + scroller.getCurrY());
}
}
}初始速度似乎很合理--大约在1000像素/秒左右。记录的速度要小一点,这似乎也是合理的。然而,"newY“值是传递给fling的MAX_VALUE。
有什么想法吗?有什么想法吗?
发布于 2013-07-03 07:25:46
必须使用OverScroller。
滚动条的文档对我来说不是很清楚--我以为最小和最大值只是用来限制滚动条数的。但是,它们也用于确定滚动范围,这意味着computeScrollOffset使用限制来缩放动画,而不仅仅是限制动画。
https://stackoverflow.com/questions/17396177
复制相似问题