Flashhilfe.de - Flash Community

addEventlistener zu <mx:image> Tag dynamisch per Funktion!? [Flash 10]

 


AntwortenRegistrieren Seite1  

Bettina24#1
Benutzerbild von Bettina24
Beiträge: 4
Registriert: Mar 2010

09.03.2010, 18:00

Hallo

Ich komme leider nicht weiter und verstehe gerade nicht ganz wo ich ansetzen muss!?
Vielleicht hat ja hier jemand eine Idee und kann mir helfen?

Vereinfacht gesagt habe ich ein <mx:Image> Tag innerhalb eines <mx:Repeater> welcher mit url's aus  einer XML Datei gefüttert wird und die dortigen Bilder in einer <mx:HBox> anzeigt.

ActionScript:
1
2
3
4
5
6
7
8
9
                    <mx:Image
                    id="myImage"
                    scaleY=".50"
                    scaleX=".50"
                    source="{photos.currentItem.attribute('url')}"
          horizontalAlign="left"    
               creationComplete="ini(event)"
                    completeEffect="{fadeIn}"
                    dragDrop="true">


Das funktioniert soweit auch wunderbar. Nun möchte ich aber gerne innerhalb dieser HList DragAndDrop ermöglichen und zwar so, dass die Bilder innerhalb dieser einen HList per DragAndDrop in ihrer Reihenfolge verändert werden können (also nicht von hier in irgendeinen anderen Container sondern in dem selben als target)

Deshalb würde ich jetzt auf jedes Bild einen eventListener setzen, der bei creationComplete() eine ini() aufruft, welche die notwendigen eventListener added. Der Aufruf klappt auch, aber wenn ich dann die eventListener zuweisen möchte gibt es zwar keine Fehlermeldung aber anspringen tun sie dann auch nicht. Wenn ich einen eventListener direkt im <mx:image> Tag zuweise - statt der Funktion ini() geht das. Da ich aber für das DragAndDrop mehrere brauche wollte ich das elegant mit der ini() lösen!?

Wenn ich mir in der ini() mit trace(evt.target) ausgebe bekomme ich für jedes Bild die Adresse des Arrays, das der repeater (!?) anlegt - das ist aber ja nicht die Objektreferenz oder!? ist das der Grund weshalb die eventListener nicht reagieren? Und wie kann man das sonst machen damit es funktioniert!?

Der Vollständigkeit wegen hier noch mal der gesamte Code (es ist eine Komponente, die in meine Applikation eingebunden wird)

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%">

    <mx:Script>
        <![CDATA[
           import mx.core.Application;
           import mx.utils.UIDUtil;
           import mx.core.DragSource;
           import mx.core.IUIComponent;
           import mx.managers.DragManager;
           import mx.events.DragEvent;
   
              [Bindable]   
              private var _dataFeed:XML;
              private var _categoryIdRef:String;
         
         

           
          public function set dataFeed(value:XML):void
         {
         if (_dataFeed == value)
            return;
         _dataFeed = value;
         }   
         
         
     public function set categoryIdRef(value:String):void
         {
         if (_categoryIdRef == value)
            return;
         _categoryIdRef = value;
         } 


            private function dataFilter(XMLobj:XML):XMLList
            {
               var newXMLList:XMLList;
               
               for each (var value:XML in XMLobj.contents.content) {
                  if (value.attribute('categoryIdRef')==_categoryIdRef) {
                  trace("***"+value.picture);
                  newXMLList=value.picture;
                  }
                  
               }
         return newXMLList;   
            }
           
           
        ]]>
    </mx:Script>

    <mx:Fade id="fadeIn" duration="3000" alphaFrom="0" alphaTo="1"/>
    <mx:Fade id="fadeOut" duration="3000" alphaFrom="1" alphaTo="0"/>
         
                <mx:HBox id="x23" horizontalAlign="center" horizontalGap="2"
                  backgroundColor="0x333333"
                   width="100%" height="90%"
                   paddingTop="2"
                   paddingBottom="2">

                    <mx:Repeater
                    id="photos"
                    dataProvider="{dataFilter(_dataFeed)}"
                    recycleChildren="true">       
               
               
         <mx:Box
         id="myElement"
         mouseChildren="false"
         backgroundColor="0x333333">
            
               
         <mx:Script>
         <![CDATA[
         import mx.events.FlexEvent;
               
         private function ini(evt:Event):void {         
                     evt.target.addEventListener( MouseEvent.MOUSE_DOWN, beginDrag );
         evt.target.addEventListener( DragEvent.DRAG_ENTER, acceptDrop );
         evt.target.addEventListener( DragEvent.DRAG_DROP, handleDrop );
                        }
         
                   public function beginDrag( mouseEvent:MouseEvent ):void {
         var dragInitiator:IUIComponent = mouseEvent.currentTarget as IUIComponent;
         var dragSource:DragSource = new DragSource();
         DragManager.doDrag( dragInitiator, dragSource, mouseEvent, null );
                   }
          
                   public function acceptDrop( dragEvent:DragEvent ):void {
         var dropTarget:IUIComponent = dragEvent.currentTarget as IUIComponent;
         DragManager.acceptDragDrop( dropTarget );
         }

         public function handleDrop( dragEvent:DragEvent ):void {
         var dragInitiator:IUIComponent = dragEvent.dragInitiator;
         var dropTarget:IUIComponent = dragEvent.currentTarget as IUIComponent;
         }

         ]]>
           </mx:Script>
      
                            <mx:Image
                            id="myImage"
                            scaleY=".50"
                            scaleX=".50"
                            source="{photos.currentItem.attribute('url')}"
                  horizontalAlign="left"    
                  toolTip="ID: {photos.currentItem.attribute('id')}&#13;URL: {photos.currentItem.attribute('url')}"
                  creationComplete="ini(event)"
                            completeEffect="{fadeIn}"
                            dragDrop="true">
                          </mx:Image>
                   
                         <mx:Text text="ID: {photos.currentItem.attribute('id')}"/>
                         <mx:TextInput text="{photos.currentItem.attribute('label')}"/>
             
             </mx:Box>     
                    </mx:Repeater>
                </mx:HBox>   

</mx:Canvas>
Werbung
Beiträge: 0
Registriert: Feb 2016


badskill#2
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

09.03.2010, 18:08

Warum nimmst du nicht die HorizontalList?
Da ist doch die Drag-Drop-Funktionalität bereits enthalten.
Bettina24#3
Benutzerbild von Bettina24
Beiträge: 4
Registriert: Mar 2010

Themenautor/in

10.03.2010, 00:57

ja, mit der hatte ich angefangen, aber mein Hauptproblem dabei war, dass ich Bilder mit einer festen Höhe aber variabler Breite habe und diese sollen direkt nebeneinander in der selben konstanten Höhe angezeigt werden. Dazu müsste aber die columnWidth in der HorizontalList variabel an die Bilderbreite angepasst werden. Und nach allem was ich bisher gefunden haben ist das nicht möglich oder!?

Da die Bilder sehr unterschiedliche Breiten haben ist das Ergebnis ziemlich häßlich (=lauter große und kleine Abstände zwischen den einzelnen Bildern).

ScaleX und ScaleY haben mir hier nicht geholfen, genauso wie das weglassen der Angaben für die Bilderbreite. Das Setzen der Bilderbreite im Renderer macht keinen Sinn, weil damit columnWidth noch immer unverändert bleibt und die einzelnen Bilder entweder abgeschitten werden oder eben scrollbar innerhalb der HorizontalList sind.

Ansonsten wäre das natürlich eine Lösung....
Geändert von Bettina24 am 10.03.10 um 03:58 Uhr
spiderjutt32#4
Benutzerbild von spiderjutt32
Beiträge: 1
Registriert: Mar 2015

05.03.2015, 08:20

this was helpful..thanks
omair
Werbung
Beiträge: 0
Registriert: Feb 2016



AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Was läuft falsch? [Flash 11] 05.06.2016 - cokebaby
Partner Webseiten: art-and-law.de  Mediengestalter.info   php-resource.de   phpforum.de   phpwelt.de   Pixelio.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Hier Werben   Impressum
© 1999-2019 Sebastian Wichmann - Flashhilfe.de