У меня есть Скроллер, используемый для броска. Я инициализирую его с начальной скоростью и некоторыми ограничениями. Когда я позже получаю новое значение Y, getCurrY возвращает предел Y, переданный в fling.Scroller.getCurrY возвращает максимальное значение после прохода
Вот сильно упрощенный код:
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» является MAX_VALUE, переданный в fling.
Любые идеи? Любые идеи?
Даже если я просто касаюсь без движения (т. Е. Скорость равна 0), getCurrY все еще возвращает MAX_VALUE. Это должна быть какая-то невероятная ошибка, которую я делаю! –