Конечное значение GWT Animation не соблюдается

У меня есть FlowPanel, которую я пытаюсь анимировать взад и вперед, как навигация по iphone. (Увидетьэтот пост для моего оригинального вопроса о том, как это сделать)

Так что у меня это "работает" с кодом, показанным ниже. Я говорю, работая в кавычках, потому что я нахожу, что мое окончательное положение моего скроллера не точное и всегда изменяется при прокрутке.

GWT.log всегда сообщает фактические значения, которые я ищу, поэтому, например, с помощью вызова scrollTo, приведенного ниже, мой GWT.log говорит:

ScrollStart: 0 scrollStop: -246

Но когда я на самом деле анализирую элемент в fireBug, его css, левая позиция никогда не бывает точно -246px. Иногда он отключается на целых 10 пикселей, поэтому моя панель просто перестала прокручиваться, прежде чем закончить.

Хуже всего то, что эта навигация анимирует взад и вперед, поэтому последующие клики могут действительно скинуть ее, и мне нужно идеальное позиционирование в пикселях, в противном случае все выглядит не так.

Я даже не знаю, с чего начать с отладки, кроме того, что я уже сделал. Любые советы приветствуются.

РЕДАКТИРОВАТЬ: Дополнительная информация регистрации:
Регистрация внутри onUpdate показывает это:

Updating: progress: 0.09319577524960648 position: -22.926160711403195
Updating: progress: 0.1328387452821571 position: -32.67833133941065
Updating: progress: 0.609071620698271 position: -149.83161869177468
Updating: progress: 0.7269952498697734 position: -178.84083146796425
Updating: progress: 0.9852532367342712 position: -242.37229623663072
AnimationComplete: final scrollStart/scrollStop: 0/-246

Почему это заканчивается на 0,98% ???

Код для вызова анимации

scroller = new Scroller();
scroller.scrollTo(-246,400);

Код анимации

public class Scroller extends Animation {

    private FlowPanel scroller;
    private final Element e;

    public Scroller(){
        scroller = new FlowPanel();
        e = scroller.getElement();
    }

    public void scrollTo(int position, int milliseconds) {

        scrollStart = e.getOffsetLeft();
        scrollStop = position;

        GWT.log("ScrollStart: " + scrollStart + " scrollStop: " + scrollStop);
        run(milliseconds);
    }

    @Override
    protected void onUpdate(double progress) {
        double position = scrollStart + (progress * (scrollStop - scrollStart));
        e.getStyle().setLeft(position, Style.Unit.PX);
    }
}

Ответы на вопрос(1)

Ваш ответ на вопрос