El valor final de GWT Animation no se respeta

Tengo un FlowPanel que intento animar de un lado a otro como un navegador de iPhone. (Veresta Publicar para mi pregunta original sobre cómo hacer esto)

Así que lo tengo "funcionando" con el código que se muestra a continuación. Digo trabajando entre comillas porque descubro que mi posición final de mi desplazador no es precisa y siempre cambia al desplazarse.

El GWT.log siempre dice los valores reales que estoy buscando, así que, por ejemplo, con la siguiente llamada a scrollTo, mi GWT.log dice:

ScrollStart: 0 scrollStop: -246

Pero cuando realmente analizo el elemento en fireBug, su posición CSS, izquierda nunca es exactamente -246px. A veces está apagado hasta 10px, así que mi panel ha dejado de desplazarse antes de terminar.

La peor parte es que este navegador anima de un lado a otro, por lo que los clics posteriores realmente pueden alterarlo, y necesito un posicionamiento perfecto de píxeles; de lo contrario, todo se ve mal.

Ni siquiera sé por dónde empezar con la depuración, aparte de lo que ya he hecho. Cualquier consejo es apreciado.

EDITAR: información de registro adicional:
Iniciar sesión dentro de onUpdate muestra esto:

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

¿Por qué termina en 0.98%?

Código para llamar animación

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

Código de animación

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);
    }
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta