У меня есть 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);
}
}