Aide - Recherche - Membres - Calendrier
Version complète : Drag and drop sur des images
Centre de Formation Flash - Forums Adobe Flash > Rich media et intégration > Flex
adakick
Bonjour, je souhaite faire un drag and drop sur des images. J'ai utilisé le tutoriel trouver ici : http://www.adobe.com/devnet/flex/quickstar..._drag_and_drop/ ( premiere exemple avec les pieces)

Tout fonctionne, mais moi je voudrais faire pareil avec des images dynamique.
Voila mon code

CODE
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" viewSourceURL="src/DragAndDropDragInitiatorEvents/index.html" width="900" height="900" initialize="create();">
    <mx:Script>
        <![CDATA[
            import mx.managers.DragManager;
            import mx.core.DragSource;
            import mx.events.VideoEvent;
            import mx.controls.Image;
            import mx.effects.IEffectInstance;
            import mx.controls.*;
               import mx.controls.Alert;            
               import mx.effects.easing.*;
            
            [Embed("media/ccm.jpg")]
            [Bindable]
            public var OneCent:Class;
            
            private function create():void{
                contents.send();
            }
            
               // Affiche les thumbnails
            private function handleHttpRequest(event:Event):void{            
                for( var i:uint = 0; i < contents.lastResult.content.length(); ++i ){
                    var canvas:Canvas = new Canvas();
                    canvas.height = 80;
                    canvas.width = 60;
                    canvas.setStyle( "backgroundColor", 0x8888FF );
                    var image:Image = new Image();
                    image.height = 80-2;
                    image.width = 60-2;
                    image.source = "media/"+contents.lastResult.content[i].thumbnail;
                    image.x = 1;
                    image.y = 1;
                    image.alpha = 1.0;
                    image.scaleContent = true;
                    image.maintainAspectRatio = false;
                    image.addEventListener(MouseEvent.MOUSE_MOVE, dragIt);
                    canvas.addChild( image );
                    details.addChild( canvas );
                }
            }
        
            private function dragIt(event:MouseEvent):void {
                var dragInitiator:Image = event.currentTarget as Image;
                var dragSource:DragSource = new DragSource();
                dragSource.addData(1, 'value');
                var dragProxy:Image = new Image();
                dragProxy.source = event.currentTarget.source;
                DragManager.doDrag(dragInitiator, dragSource, event, dragProxy);
            }
        ]]>
    </mx:Script>
    
           <mx:HTTPService id="contents" url="./resources/contents.xml" result="handleHttpRequest(event)" resultFormat="e4x" />
       <mx:Canvas>
       
        <mx:VBox id="details"  x="0" y="0"></mx:VBox>
    </mx:Canvas>
</mx:Application>

Dans ce code j affiche bien mes images, je leur affect la methode dragIt, mais lorsque je déplace mes image, je n'ai pas une copie de l image qui suit ma souris, car il faudrait que je créer pour chaque image une variable de ce type mais avec les valeur en dynamique
CODE
            [Embed("monImage")]
            [Bindable]
            public var OneCent:Class;

Mais comme faire ??

Merci
Tonic
Salut,

il te suffit, lorsque tu commences le drag, de faire une copie de l'image que tu veux dragger et donc, ne pas dragger l'image source, mais la copie que tu as faites.

Pour cela, il te suffit d'utiliser ta variable "dragInitiator", de récupérer la sources, et de créer une nouvelle image à partir de la source.
iteratif
CITATION(Tonic @ Jul 13 2007, 02:28 PM) *
Pour cela, il te suffit d'utiliser ta variable "dragInitiator", de récupérer la sources, et de créer une nouvelle image à partir de la source.


Cela ne marchera pas uniquement de cette manière. Il faut récupérer la BitmapData de l'image a déplacer :
CODE
var dragImage:BitmapAsset = new BitmapAsset(Bitmap(dragInitiator.content).bitmapData);


parce que la propriété source est vide.
Tonic
Oui désolé, j'ai répondu trop vite.

Pour ma part, je stocke la source (et d'autres infos si nécessaire) dans la propriété "data" également, que je peux récupére via l'objet "dragInitiator".

Merci Itératif pour cette élégante solution. icon_wink.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.