有谁知道新版本的 flex 中是否有任何类型的长按手势(如在 Android 上)?
我希望在长按时使列表中的项目可编辑/可删除,但我真的希望我不必用计时器等做出自己的长按手势。
如果没有内置,是否有人知道有关如何制作长按手势的任何资源/博客文章 - 或者,如何制作可编辑列表?
有谁知道新版本的 flex 中是否有任何类型的长按手势(如在 Android 上)?
我希望在长按时使列表中的项目可编辑/可删除,但我真的希望我不必用计时器等做出自己的长按手势。
如果没有内置,是否有人知道有关如何制作长按手势的任何资源/博客文章 - 或者,如何制作可编辑列表?
flextras 回答了它,我只是想跟进一个似乎有效的代码示例。现在,我只是弹出一个询问您是否要从列表中删除该项目的弹出窗口。
private var deleteAlert:DeleteAlert = new DeleteAlert();
private var longPressTimer:Timer = new Timer(1500,1);
protected function LoadChartView_viewActivateHandler(event:ViewNavigatorEvent):void {
enableClick();
}
private function startLongPressMouse(event:MouseEvent):void {
startLongPressTimer();
list.addEventListener(MouseEvent.MOUSE_MOVE, endLongPressMouse);
}
private function endLongPressMouse(event:MouseEvent):void {
stopLongPressTimer();
enableClick();
list.removeEventListener(MouseEvent.MOUSE_MOVE, endLongPressMouse);
}
private function startLongPress(event:TouchEvent):void {
startLongPressTimer();
list.addEventListener(TouchEvent.TOUCH_MOVE, endLongPress);
}
private function endLongPress(event:TouchEvent):void {
stopLongPressTimer();
enableClick();
list.removeEventListener(TouchEvent.TOUCH_MOVE, endLongPress);
}
private function startLongPressTimer():void {
longPressTimer.start();
longPressTimer.addEventListener(TimerEvent.TIMER_COMPLETE, longPressHandler);
}
protected function disableClick():void {
trace("disable click");
list.removeEventListener(MouseEvent.CLICK, regularClickHander);
}
public function enableClick():void {
list.callLater(list.addEventListener, [MouseEvent.CLICK, regularClickHander]);
}
public function resetListSelection():void {
list.selectedIndex = -1;
list.validateDisplayList();
}
private function stopLongPressTimer():void{
longPressTimer.stop();
longPressTimer.reset()
}
public function longPressHandler(event:TimerEvent):void{
disableClick();
stopLongPressTimer();
deleteAlert.addEventListener(PopUpEvent.CLOSE, popupClosedHandler);
deleteAlert.open(this, false);
PopUpManager.centerPopUp(deleteAlert);
}
public function popupClosedHandler(event:PopUpEvent):void{
if (event.commit)data.removeItemAt(list.selectedIndex);
callLater(resetListSelection);
}
为了方便测试,我同时使用了鼠标和触摸事件:
<s:List id="list" top="0" bottom="0" left="0" right="0"
dataProvider="{data}"
touchBegin="startLongPress(event)" touchEnd="endLongPress(event)"
mouseDown="startLongPressMouse(event)" mouseUp="endLongPressMouse(event)">
看看Gestouch(开发分支是最新的)org.gestouch.gestures.LongPressGesture
看起来不像,基于TouchEvent 类的 ASdocs:
事实上,我对此有点惊讶。您可能可以使用带有计时器的TOUCH_END和TOUCH_BEGIN事件来模拟一些东西。