Andrzej Dżodżo

Andrzej Dżodżo Student, ZSŁ

Temat: Przeciąganie zdjęcia między komponentami

Witam!

Piszę temat, ponieważ mam następujący problem:
Otóż, ostatnio tworzę aplikację do odtwarzania filmów. Aplikacja składaja się z głównego pliku aplikacji - main.mxml , i 4 komponentów - filmList.mxml(lista filmów), playList.mxml(lista Odtwarzania), videoPlayer.mxml(komponent do odtwarzania filmu), soundVisualizer.mxml (wizualizacja dźwięku).

Tutaj jest jak to mniej więcej ma wyglądać(obrazek jest tylko poglądowy):

Obrazek

Chciałem umieścić w tej aplikacji możliwość przeciągnięcia filmu z Listy filmów do Listy odtwarzania(tak jak na obrazku - biorę film z listy filmów, przeciągam nad całą aplikacja i upuszczam do listy odtwarzania). Sam mechanizm przeciągania i dodawania filmów do listy wiem jak zrobić, ale problem pojawia się gdy mam wydostać coś poza komponent filmList i przeciągnąć przez całą aplikację do komponentu playList. Gdy chcę "wyciągnąć" coś z komponentu, to ciągnięty obiekt (obrazek, canvas itd.) chowa się poza boczną krawędź komponentu i koniec. Czy da się jakoś wyciągnąć canvas'a poza komponent, przeciągnąć go przez całą aplikację, nad innymi komponentami i "opuścić" do innego komponentu?Andrzej Dżodżo edytował(a) ten post dnia 06.01.12 o godzinie 15:08

konto usunięte

Temat: Przeciąganie zdjęcia między komponentami

podejrzewam że masz to umieszczone bezpośrednio w main.mxml (czarne tło), jeżeli tak to znika dlatego że on nie ma wyłączonego dropa i dlatego się chowa. Bo rozumiem że jak wjeżdżasz na komponent na którym to chcesz upuścić to ikona dropa znowu się pojawia ?

Jeżeli używasz własną obsługę draga i dropa, to pamiętaj o obsłużeniu tego eventa na każdym z komponentu nad którym może się pojawić.Paweł S. edytował(a) ten post dnia 06.01.12 o godzinie 15:45
Andrzej Dżodżo

Andrzej Dżodżo Student, ZSŁ

Temat: Przeciąganie zdjęcia między komponentami

Ja tego nie robię za pomocą Drag, tylko za pomocą MouseDown i MouseUp. Napisałem sam kod przeciągania w osobnej aplikacji, żeby pokazać jak mniej więcej wygląda:
main.mxml:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()" layout="horizontal" horizontalGap="50" xmlns:comp="comp.*">

<mx:Script>
<![CDATA[
import comp.playList;
import comp.filmList
public var cmp:filmList = new filmList()
public var cmp2:playList = new playList()
public var niesione:Boolean = false
private function init():void{
this.addChild(cmp)
this.addChild(cmp2)
}
]]>
</mx:Script>
</mx:Application>

filmList.mxml:

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" backgroundColor="green" width="400" height="300">
<mx:Script>
<![CDATA[
import mx.core.Application;
import mx.events.MoveEvent;

private function Drag(event:MouseEvent):void{
Application.application.niesione = true
this.addEventListener(MouseEvent.MOUSE_MOVE,myMove)
}
private function Drop(event:MouseEvent):void{
Application.application.niesione = false
myCanv.removeEventListener(MoveEvent.MOVE,myMove) }
private function myMove(event:MouseEvent):void{
if(Application.application.niesione){
myCanv.x = mouseX - myCanv.width/2
myCanv.y = mouseY - myCanv.height/2 } }
]]>
</mx:Script>
<mx:Canvas id="myCanv" width="30" height="15" cornerRadius="4" borderStyle="solid" backgroundColor="0x99FF33" mouseDown="Drag(event)" mouseUp="Drop(event)"/>
</mx:Canvas>

playList.mxml:

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()" backgroundColor="0x88FF33" width="400" height="300">
<mx:Script>
<![CDATA[
import mx.core.Application;
import mx.controls.Alert;

private function init():void{
this.addEventListener(MouseEvent.MOUSE_UP,dodaj)
}
private function dodaj(event:MouseEvent):void{
if(Application.application.niesione){
Alert.show("przeniesiono")
}
}
]]>
</mx:Script>
</mx:Canvas>


I teraz chcę przeciągnąć myCanv z filmList do playList. Da się to zrobić?Andrzej Dżodżo edytował(a) ten post dnia 06.01.12 o godzinie 16:47

konto usunięte

Temat: Przeciąganie zdjęcia między komponentami

No to zrób to na drag & drop z prawdziwego zdarzenia (wykorzystując odpowiednie eventy), w necie jest sporo razy opisane jak zrobić własne drag and drop.

Tak jak to robisz w swoim kodzie jest niepoprawne i nie ma prawa rozsądnie działać.

Tu jeden z przykładów.
http://www.flexafterdark.com/docs/Flex-DragAndDrop
Piotr Kubasiak

Piotr Kubasiak Flex developer

Temat: Przeciąganie zdjęcia między komponentami

To co napisałeś nie ma prawa działać !!
Tak jak kolega wyżej napisał, Flex ma wbudowane zdarzenia na Drag i drop. Wystarczy włączyć dragenabled i już działa potem tylko oprogramowujesz drop. Domyślając się , że w liście odtwarzania masz tytuły filmów (Stringi) to w dropie wystarczy pobrać z event data i wczytać film o tym tytule.

Polecam poczytać o drag and dropie.
Piotr Kubasiak

Piotr Kubasiak Flex developer

Temat: Przeciąganie zdjęcia między komponentami

[post zdublowany]Piotr Kubasiak edytował(a) ten post dnia 07.01.12 o godzinie 02:55
Andrzej Dżodżo

Andrzej Dżodżo Student, ZSŁ

Temat: Przeciąganie zdjęcia między komponentami

Okej. Użyłem Drag & Drop i spisuje się to wyśmienicie. Problem rozwiązany.

Dziękuję wszystkim za pomoc i pozdrawiam,
Andrzej.

Następna dyskusja:

remoteObject resultHandler ...




Wyślij zaproszenie do