Я разрабатываю приложение для устройств ANDROID с помощью Flash Builder Burrito, и мне сложно понять, как реализовать один из аспектов моего приложения.
У меня есть HGroup внутри скроллера. В HGroup есть изображения шириной 400 пикселей, и у меня ширина каждого столбца HGroup установлена на 400 пикселей. Хотя количество элементов динамическое, предположим, что у меня есть 10 изображений в HGroup. Ширина ползунка и области просмотра установлена на 400 пикселей.
Пока все хорошо - пользователь может видеть одно изображение внутри скроллера. Затем пользователь может прокручивать влево или вправо с помощью касания или мыши и просматривать каждое изображение. Но вот где я застрял. Я хочу сделать так, чтобы, когда пользователь ПРЕКРАЩАЕТ прокрутку скроллера, «привязывает» изображение к просмотру. Другими словами, мне не нужна половина одного изображения и половина другого изображения в области просмотра.
Кажется довольно простым, но я не могу этого понять. Отчасти проблема в том, что, похоже, нет события, которое можно было бы использовать для этой цели. Я знаю, что могу подключиться к PropertyChangeEvent.PROPERTY_CHANGE или MouseEvent.MOUSE_UP / TouchEvent.TOUCH_END (что я и делаю сейчас), но это событие на самом деле не дает мне того, что мне нужно.
Мне действительно нужно событие, которое срабатывает, когда пользователь отпускает мышь как часть прокрутки или убирает палец с устройства как часть прокрутки. Затем мне нужно дождаться остановки прокрутки. Например, если я делаю действительно быстрое смахивание, мне нужно дождаться остановки или почти остановки ползунка, прежде чем я выполню привязку. Событие запускается, как только я отпускаю мышь или убираю палец с планшета, поэтому, если я изменяю положение горизонтальной прокрутки, оно перезаписывается «замедлением прокрутки».
Кстати, я знаю, что могу использовать модульную логику, чтобы показать каждое изображение «целиком». Я застрял не в этом - я застрял в том, какое событие использовать, чтобы знать, КОГДА выполнять эту логику мода.
Обратите внимание, что то, что я уже разработал, отлично работает, если я медленно прокручиваю, а затем отпускаю мышь. Это перестает работать, только когда вы скользите быстрее.
Вот мой частично рабочий код:
private function onVehicleScrollerMouseUp(event:Event):void
{
snapScroller();
}
private function onVehicleScrollerTouchEnd(event:Event):void
{
snapScroller();
}
private function snapScroller():void
{
// If the user didn't stop at an interval of 400, snap to that interval now
var newScrollPosition:uint = vehicleScroller.viewport.horizontalScrollPosition as uint;
var modScrollPosition:uint = newScrollPosition % 400;
var snapScrollPosition:uint;
if (modScrollPosition == 0)
snapScrollPosition = newScrollPosition;
else
{
if (modScrollPosition <= 200)
snapScrollPosition = newScrollPosition - modScrollPosition;
else
snapScrollPosition = newScrollPosition - modScrollPosition + 400;
}
vehicleScroller.viewport.horizontalScrollPosition = snapScrollPosition as Number;
}
Заранее спасибо!