2011-06-29 12 views
1

フレックスの新バージョンでロングプレスのジェスチャー(Androidのようなもの)があれば、誰も知っていますか?ロングプレスspark.components.listアイテム

私は長い間報道された時に編集可能な/削除可能なリストのアイテムを作ることを望んでいますが、私はタイマーなどで自分のロングプレスジェスチャーを作ってはいけないと本当に望んでいます。

内蔵されていない場合、長押しジェスチャーの作成方法や編集可能なリストの作成方法に関するリソースやブログの投稿は誰にも知られていますか?

答えて

0

ASdocs for the TouchEvent classに基づいて、そのように見えない:

私は実際には、そのことで少し驚いています。あなたはおそらくTOUCH_ENDTOUCH_BEGINのイベントをtimerで使って何かを模擬することができます。

+0

私はありません。 Flexは、モバイルであることを信じています。それを加えれば、あなたは、あなたのユーザーがすべてのOSで使用されていない長押しを理解していると仮定しています。 –

+0

@J_A_XどのモバイルOSがサポートしていませんか?私は基礎をなす公開されたAPIを見ていないが、iOS、Android、およびPlaybookはアイコンを動かすためにそれぞれの「ホームスクリーン」で長いプレスを使用している。 – JeffryHouser

+0

ええ、それはそれについてです。 Androidは、リストなどの「編集」機能として、どこからでも長押ししています。 iOSやプレイブックでは行えないものいずれにしても、新しいジェスチャーを作成することは厳密には難しくありません。 –

0

org.gestouch.gestures.LongPressGesture

+0

素晴らしい、リソースのおかげで!私は間違いなくそれをチェックします! –

2

flextrasがそれに答えて、私はちょうどように見えるのコードサンプルをフォローアップしたかった(developブランチは、より最新である)Gestouch上を見てみましょう作業。今のところ、リストから項目を削除するかどうかを尋ねるポップアップを表示するだけです。

 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)"> 
+0

これを実行すると、 'list.selectedIndex'は-1またはpreviousIndexのインデックスになります。それを修正するには? – Snote

関連する問題