Hej Flexere, så er jeg her igen..
Er det muligt via flex's DragManager class, at sætte en form for bounding box for hvor det er lovligt at trække et element.
Det jeg vil opnå er at man fx kun kan trække et element på y-aksen, altså op og ned fra udgangspunktet.
/Lasse ![]()
8 kommentarer
Det kan du ikke bruge DragManageren til (ass fart ass I know). Hvis hele dit drag område er droptarget kan du bruge DragEvent...i det tilfælde kunne du bruge dragOver eventet, da det bliver affyret mens du dragger over dit droptarget.
Hvis hele dit dragområde ikke er droptarget (hvilket det sikkert ikke er) og hvis dit element understøtter move eventet kan du bruge dette til at restricte din y movement.
Jeg benytter move eventet til at starte mit drag, men jeg kan ikke lige regne ud hvordan jeg begrænser min y bevægelse, kunne jeg måske lokke et eksempel ud af dig?
Det afhænger jo af, hvordan din kode ser ud...hvilken type element er det du ønsker at dragge?
Er det proxy af dit element du ønsker at begrænse til kun at flytte sig langs y aksen? Lidt kode som udgangspunkt gør det nemmere at lave det rigtige eksempel
Selvfølgelig
Egentlig ville det være fint hvis man bare kunne trække det element move eventet bliver affyret fra, men så vidt jeg har fundet frem til skal dragmanageren bruge en imageproxy som er en kopi.
Men ja, det skal bare begrænses på y-aksen.
Her er min move event handler kode:
private function mouseMoveHandler(event:MouseEvent):void
{
var dragInitiator:albumRenderer = albumRenderer(event.currentTarget);
var ds:DragSource = new DragSource();
ds.addData(event.currentTarget.infoData, 'album');
var imageProxy:albumRenderer = new albumRenderer();
imageProxy.infoData = event.currentTarget.infoData;
imageProxy.setStyle('borderSides', 'top bottom');
imageProxy.setStyle('fillColors', event.currentTarget.getStyle('fillColors'));
imageProxy.filters = [new DropShadowFilter(0, 90, 0, 1, 10, 10)];
DragManager.doDrag(dragInitiator, ds, event, imageProxy, 0, 0, 1);
}
Hvad trækker du dit album ind på? Ja, proxy er vist den vi skal ha fat i, når du benytter DragManageren. Jeg kigger på det imorgen, når tiden tillader det og melder tilbaus
Forsat god aften/nat
Jeg kan lige gi dig et kort praj...jeg ville lige teste noget inden jeg hoppede til køjs og jeg tror løsningen er, at lade den defaulte proxy have en alpha på 0 og så lade en proxyproxyghostproxy være den proxy du trækker rundt med...det tester jeg vider med imorgen
Altså albumet er placeret inde i et canvas, hvis det er det du spørger om?
proxyproxyghostproxy, det har jeg aldrig hørt om før, rigtigt. Kan det mon ikke lade sig gøre at lade det oprindelige component være proxy.
Tak for at du gider tage dig tid til det, det er en stor hjælp for mig, og min læringsproces af flex!
proxyproxyghostproxy var et selvopfundet ord til lige at beskrive jeg ville bypase den originale proxy
Well, i min higen efter at hjælpe dig faldt jeg over dette link:
http://www.actionscript.org/forums/showthread.php3?p=768369
Der er en fyr, der ønsker at opnå det samme som dig og han har lavet noget kode - scroll lidt ned - hvor han forsøger at restricter y aksen men det kan jo snildt ændres til x aksen (der er dog et par andre issues).
Se om du kan tilpasse hans eksempel til din kode ellers vend tilbage.
Jeg kan lige fortælle dig, at før jeg fandt ovenstående link så havde jeg leget med at ændre DragManageren så den passede til det du ville opnå men det viste sig at være lidt kompliceret bl.a. pgr. dens DragManagerImpl dependency, hvis implementation jeg havde svært ved at komme uden om...det lykkedes dog ved at oprette to nye classes - MyDragManager og MyDragManagerImpl - og lade dem blive i mx.managers namespacet og da al kode endelig hang sammen var der alligevel en twist jeg ik lige ku greje (pgr et IDragManager interface blev min MyDragManagerImpl overridet af den originale selvom jeg havde minus henvisninger til denne) og da jeg havde brugt et par timer på det - gab - tænkte jeg 'google' og voila, linket som jeg håber du kan bruge til noget
sandt at sige er det et knæk på min stolthed jeg ik fik ovenstående til at virke men jeg helmer ikke...jeg vender tilbage til den problemstilling, når tiden er til det 