Сделайте скроллер Flex / AIR с привязкой HGroup к каждому элементу после завершения прокрутки - PullRequest
4 голосов
/ 23 февраля 2011

Я занимаюсь разработкой приложения для устройств ANDROID с использованием Flash Builder Burrito и не могу понять, как выполнить один из аспектов моего приложения.

У меня есть HGroup внутри Scroller.У HGroup есть изображения шириной 400px, а ширина каждого столбца HGroup равна 400px.Хотя количество элементов является динамическим, предположим, у меня есть 10 изображений в HGroup.Ширина Scroller и Viewport установлена ​​на 400px.

Пока все хорошо - пользователь может видеть одно изображение внутри скроллера.Пользователь может затем прокрутить влево или вправо с помощью касания или мыши и увидеть каждое изображение.Но вот где я застрял.Я хочу сделать так, чтобы, когда пользователь останавливает прокрутку, то «привязывает» изображение к просмотру.Другими словами, я не хочу, чтобы половина одного изображения и половина другого изображения в области просмотра.

Кажется довольно простым, но я не могу понять это.Частично проблема заключается в том, что, похоже, нет события, которое можно было бы использовать для этой цели.Я знаю, что могу подключиться к 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;
}

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 01 февраля 2012

Событие touchInteractionEnd будет отправлено после того, как пользователь отпустит палец и анимация прокрутки остановится.Я столкнулся с этой проблемой, когда моя привязка к странице случайно прервалась, и мне пришлось вручную привязываться к какой-либо странице.

0 голосов
/ 28 апреля 2011

Multitouch.inputMode = MultitouchInputMode.GESTURE;

Затем прослушайте события gestPan и / или gestSwipe.

...