2012-05-14 70 views
0

我使用TileList來顯示圖像像一個畫廊。 在開始時,我只激活拖動選項。mx:TileList:爲什麼拖動不起作用,如果allowMultipleSelection被激活

<mx:TileList xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     xmlns:mx="library://ns.adobe.com/flex/mx" 
     columnWidth="120" 
     rowHeight="150" 
     paddingLeft="2" 
     paddingRight="2" 
     paddingTop="2" 
     paddingBottom="2" 
     itemRenderer="fr.ui.display._43Imagerie.TileUnit2" 
     doubleClickEnabled="true" 
     dragEnabled="true" 
     dropEnabled="true" 
     dragMoveEnabled="true" 
     verticalScrollPolicy="on" 
     > 

現在我嘗試添加多個選擇的可能性。

ItemRenderer的是:

<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" 
     verticalScrollPolicy="off" 
     horizontalScrollPolicy="off" 
     width="120" 
     height="150" 
     borderVisible="false" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     creationComplete="onEvent()" 

     > 
<mx:Script> 
    <![CDATA[ 
     import fr.util.imageTransform; 

     import mx.controls.Image; 
     import mx.core.UIComponent; 
     import mx.events.DragEvent; 
     import mx.managers.DragManager; 

     import org.osmf.utils.URL; 

     import spark.effects.Rotate; 

     [Bindable] 
     [Embed(source="icon/imagerie/rotate.png")] 
     private var rotationArrowClass:Class; 

     private var _file:File; 
     private var _selected:Boolean; 
     private var _sauvBMD:BitmapData; 
     public var wasScaled:Boolean = false; 
     public var deleted:Boolean = false; 
     private var bgCenterX:Number; 
     private var bgCenterY:Number; 
     private var _dragDownPt:Point; 

     [Bindable] 
     public var angle:int = 0; 

     private var dragBitmapData : BitmapData; 

     private function onEvent():void 
     { 
      // iconCanvas.addEventListener(MouseEvent.DOUBLE_CLICK, onDoubleClick); 
      // double click gere ds wPlanchePhoto3 

     } 








     private function rotationImage(e:MouseEvent):void 
     { 

      var rot:Rotate = new Rotate(); 
      rot.angleBy = 90; 
      rot.duration = 1000; 
      rot.autoCenterTransform = true; 
      rot.target = iconCanvas; 
      rot.play(); 

     } 

     private function radiansToDegrees(radians:Number):Number { 
      var degrees:Number = radians * (180/Math.PI); 
      return degrees; 
     } 

     private function degreesToRadians(degrees:Number):Number { 
      var radians:Number = degrees * (Math.PI/180); 
      return radians; 
     } 

     public function set image(im:BitmapData):void 
     { 
      this._sauvBMD=im; 
     } 

     public function get image() :BitmapData 
     { 
      return this._sauvBMD; 
     } 



     protected function iconCanvas_mouseDownHandler(event:MouseEvent):void 
     { 

      // on enregistre la point de départ 
      _dragDownPt = new Point(mouseX,mouseY); 
      // puis on écoute l'éventuel déplacement de la souris 
      this.addEventListener(MouseEvent.MOUSE_MOVE,_onMouseMoveDuringDrag); 


     } 

     private function _onMouseMoveDuringDrag(evt:MouseEvent):void { 
      // astuce pour s'assurer que la souris a vraiment bougee volontairement 
      if(Math.abs(_dragDownPt.x - mouseX) <= 2 && Math.abs(_dragDownPt.y - mouseY) <= 2) 
       return; 

      else{ 
       dragBitmapData = new BitmapData(iconCanvas.width, iconCanvas.height,true, 1); 
       dragBitmapData.draw(iconCanvas); 

       var transfert:Clipboard = new Clipboard(); 
       transfert.setData(ClipboardFormats.BITMAP_FORMAT,Bitmap(iconCanvas.content).bitmapData); 

       // only allow the file to be copied 
       var dragOptions:NativeDragOptions = new NativeDragOptions(); 
       dragOptions.allowMove=false; 
       dragOptions.allowCopy = true; 
       dragOptions.allowLink = false; 

       // begin the drag 
       NativeDragManager.doDrag(this, transfert, dragBitmapData, null, dragOptions); 
      } 
      // dispatch de l'event depuis le parent pour pouvoir écouter cet event dans l'application 
     } 



    ]]> 
</mx:Script> 

<s:BorderContainer 
        id="bcImage" 
        width="120" 
        height="99%" 
        borderVisible="true" 
        borderColor="#FFFFFF" 
        borderWeight="1" 
        cornerRadius="6" 
        backgroundAlpha=".4" 
        backgroundColor="#5f5f5f" 
        > 




    <mx:Canvas id="cvsImage" width="100%"> 
     <mx:SWFLoader id="rotationArrow" source="{rotationArrowClass}" height="18" width="18" x="3" y="3" visible="true" click="rotationImage(event);" alpha=".5"/> 
     <s:Label x="23" y="3" width="82" fontSize="11" fontWeight="normal" text="{data.imDate}" 
       textAlign="right" color="#000000"/>  


     <mx:Image id="iconCanvas" x="10" y="20" width="99" height="99" horizontalAlign="center" 
        maintainAspectRatio="true" scaleContent="true" 
        source="{data.imURL}" 
        verticalAlign="middle" mouseDown="iconCanvas_mouseDownHandler(event)" 
        > 

     </mx:Image> 
    </mx:Canvas> 

    <s:VGroup width="100%" y="124" height="25" bottom="1" left="3" right="3" paddingBottom="0" paddingTop="4" gap="0"> 
     <s:Label text="{data.imType}" height="50%" fontSize="10" paddingBottom="1" 
       fontWeight="normal" width="99%" textAlign="center" color="#000000"/> 
     <s:Label text="{data.imStade}" fontSize="10" textAlign="center" paddingTop="1" 
       fontWeight="normal" width="99%" color="#000000"/> 

    </s:VGroup> 

</s:BorderContainer> 

如果這個選項設置爲true(將allowMultipleSelection),拖動停止工作,你知道爲什麼嗎?

感謝您的幫助。

回答

0

添加allowMultipleSelection =「true」對我來說工作得很好。我正在使用最新版本的Flash Player在Mac上運行。它看起來有點片狀,但刷新頁面後,它工作得很好。我的項目中沒有的東西就是你的數據提供者和項目渲染器。我真的懷疑你的項目渲染器會導致一個問題,除非你在那裏做一些瘋狂的事情。檢查是否有最新的Flash Player。

+0

我在Mac上工作。我有最新版本的Flash Player。謝謝 – Flex60460

+0

我剛剛從上面的更新中提取了項目渲染器,使用multiSelect它仍然可以正常工作。唯一改變的是註釋掉// [Bindable] //[Embed(source="icon/imagerie/rotate.png「)]。檢查您的AIR版本(現在我意識到這是一個AIR應用程序...我的壞)。 – Dom

+0

現在感謝它的工作 – Flex60460