Ce n'est pas évident tant que vous ne l'avez pas essayé =) Je me suis débattu avec la même chose il y a quelques semaines à peine. Voici la solution que j'ai trouvée :
La liste :
<List>
<mouseDown>onListMouseDown(event)</mouseDown>
</Tree>
Le gestionnaire de la souris vers le bas :
private function onMouseDown( event : MouseEvent ) : void {
var list : List = List(event.currentTarget);
// the data of the clicked row, change the name of the class to your own
var item : MyDataType = MyDataType(list.selectedItem);
var source : DragSource = new DragSource();
// MyAwsomeDragFormat is the key that you will retrieve the data by in the
// component that handles the drop
source.addData(item, "MyAwsomeDragFormat");
// this is the component that will be shown as the drag proxy image
var dragView : UIComponent = new Image();
// set the source of the image to a bigger version here
dragView.source = getABiggerImage(item);
// get hold of the renderer of the clicked row, to use as the drag initiator
var rowRenderer : UIComponent = UIComponent(list.indexToItemRenderer(list.selectedIndex));
DragManager.doDrag(
rowRenderer,
source,
event,
dragView
);
}
Cela permettra de lancer le déplacement lorsque l'utilisateur cliquera sur un élément de la liste. Remarquez que je ne mets pas dragEnabled
et les autres propriétés liées au drag sur la liste puisque je gère tout cela moi-même.
Il peut être utile de l'ajouter au début du gestionnaire d'événements :
if ( event.target is ScrollThumb || event.target is Button ) {
return;
}
Juste pour court-circuiter si l'utilisateur clique quelque part dans la barre de défilement. Ce n'est pas très élégant mais ça fait l'affaire.