【发布时间】:2011-02-23 16:17:54
【问题描述】:
我正在使用 Flash Builder Burrito 开发适用于 ANDROID 设备的应用,但在弄清楚如何完成应用的某个方面时遇到了麻烦。
我在 Scroller 中有一个 HGroup。 HGroup 的图像宽度为 400 像素,我将每个 HGroup 列的宽度设置为 400 像素。尽管项目的数量是动态的,但假设我在 HGroup 中有 10 个图像。 Scroller 和 Viewport 的宽度设置为 400px。
到目前为止一切顺利——用户可以在滚动条中看到单个图像。然后,用户可以使用触摸或鼠标向左或向右滚动并查看每个图像。但这就是我卡住的地方。我想这样做,以便当用户停止滚动滚动条时,然后将图像“捕捉”到视图中。换句话说,我不希望在视口中有一张图像的一半和另一张图像的一半。
看起来很简单,但我无法弄清楚。部分问题是似乎没有可用于此目的的事件。我知道我可以连接到 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;
}
提前致谢!
【问题讨论】:
-
马特,我也有同样的问题:您是否设法使用以下解决方案或其他方式解决了它?
-
我遇到了同样的问题。很想知道你是否解决了它!
标签: flash apache-flex mobile scroll builder