iPhoneのナビゲーションのように前後にアニメーション化しようとしているFlowPanelがあります。(これを行う方法に関する私の最初の質問については、この投稿を参照してください)
だから私はそれを以下に示すコードで「動作」させています。スクローラーの最終的な位置が正確ではなく、スクロールすると常に変化することがわかったため、引用符で囲んで作業していると言います。
GWT.logは常に私が探している実際の値を示しているので、たとえば以下のscrollToの呼び出しでは、私のGWT.logは次のように述べています。
ScrollStart:0 scrollStop:-246
しかし、実際にfireBugの要素、そのcssを分析すると、左の位置が正確に-246pxになることはありません。時々それは10pxもずれているので、私のパネルは終了する前にスクロールを停止しました。
最悪の部分は、このナビゲーションが前後にアニメーション化することです。そのため、後続のクリックで実際にそれが外れる可能性があります。ピクセルの完全な配置が必要です。そうしないと、全体が見えなくなります。
すでに行ったこと以外に、これをデバッグするためにどこから始めればよいのかさえわかりません。ヒントをいただければ幸いです。
編集:追加のロギング情報:
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);
}
}