滚动完成后,使用HGroup“snap”创建一个Flex / AIR滚动条

时间:2011-02-23 16:17:55

标签: flash flex mobile scroll builder

我正在使用Flash Builder Burrito为ANDROID设备开发应用程序,但我无法弄清楚如何完成应用程序的某个方面。

我在Scroller中有一个HGroup。 HGroup的图像宽度为400px,每个HGroup列的宽度设置为400px。虽然项目数是动态的,但假设我在HGroup中有10个图像。 Scroller和Viewport的宽度设置为400px。

到目前为止,用户可以在滚动条中看到单个图像。然后,用户可以使用触摸或鼠标向左或向右滚动并查看每个图像。但是这就是我被困住的地方。我想这样做,以便当用户STOPS滚动滚动条时,然后将图像“捕捉”到视图中。换句话说,我不希望视口中的一半图像和另一半图像的一半。

看起来很简单,但我无法理解。部分问题是似乎没有用于此目的的事件。我知道我可以挂钩到PropertyChangeEvent.PROPERTY_CHANGE或MouseEvent.MOUSE_UP / TouchEvent.TOUCH_END(这就是我现在正在做的事情),但那个事件并不能真正满足我的需求。

我真的需要一个事件,当用户将鼠标作为滚动的一部分释放时触发,或者将手指从设备上抬起作为滚动的一部分。 然后我需要等待滚动停止 。例如,如果我执行非常快速的滑动,我需要等待滚动条停止或几乎停止,然后执行快照。一旦我松开鼠标或将手指从平板电脑上移开,事件就会触发,所以如果我改变水平滚动位置,那么它会被“减速滚动条”所覆盖。

顺便说一句,我知道我可以使用模数逻辑来显示每个图像“整体”。那不是我被困的地方 - 我被困在哪个事件用来知道什么时候执行这个mod逻辑。

请注意,如果我慢慢滚动然后放开鼠标,我已经开发的功能就可以了。只有当你滑得更快时它才会停止工作。

这是我的部分工作代码:

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 :(得分:0)

Multitouch.inputMode = MultitouchInputMode.GESTURE;

然后收听gesturePan和/或gestureSwipe事件。

答案 1 :(得分:0)

在用户释放手指并且滚动动画停止后,将调度touchInteractionEnd事件。当我的页面捕捉随机破坏并需要手动捕捉到某个页面时,我遇到了这个问题。