GWT Animationsendwert wird nicht eingehalten

Ich habe ein FlowPanel, das ich wie ein iPhone Navi hin und her animieren möchte. (SehenDie Post für meine ursprüngliche Frage, wie das geht)

So habe ich es mit dem unten gezeigten Code "arbeiten". Ich sage, ich arbeite in Anführungszeichen, weil ich feststelle, dass meine Endposition des Scrollers nicht genau ist und sich beim Scrollen immer ändert.

Das GWT.log sagt immer die tatsächlichen Werte, nach denen ich suche, also sagt mein GWT.log zum Beispiel beim Aufruf von scrollTo unten:

ScrollStart: 0 scrollStop: -246

Aber wenn ich tatsächlich das Element in FireBug analysiere, ist seine CSS-Position auf der linken Seite nie genau -246px. Manchmal ist die Bildlaufgeschwindigkeit um bis zu 10px verringert, sodass mein Panel gerade nicht mehr rollt, bevor es fertig ist.

Das Schlimmste ist, dass dieses Navi hin und her animiert, sodass nachfolgende Klicks es wirklich abwerfen können, und ich brauche eine pixelgenaue Positionierung, sonst sieht das Ganze aus.

Ich weiß gar nicht, wo ich anfangen soll, wenn ich etwas anderes debugge als das, was ich bereits getan habe. Alle mögliche Spitzen werden geschätzt.

EDIT: Zusätzliche Protokollierungsinformationen:
Logging innerhalb des onUpdate zeigt dies:

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

Warum endet es bei 0,98% ???

Code zum Aufrufen von Animation

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

Animation Code

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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage