2013-05-28 3 views
0

Мне нужно настроить перетаскивание из Flex Tree. Для этого я переопределен защищенную функцию mouseDownHandler:Пользовательское перетаскивание в Flex Tree

override protected function mouseDownHandler(event:MouseEvent):void 
{ 
    if (event.target is ScrollThumb || event.target is Button) 
    { 
     return; 
    } 

    super.mouseDownHandler(event); 

    var tree:Tree = Tree(event.currentTarget); 

    if (tree.selectedItem && tree.indexToItemRenderer(tree.selectedIndex) && tree.selectedItem is Image) 
    { 
     var image:Image = Image(tree.selectedItem); 
     var source:DragSource = new DragSource(); 
     var dragView:Image = new Image(); 
     dragView.source = drawGhost(image); 
     var dragInitiator:UIComponent = UIComponent(tree.indexToItemRenderer(tree.selectedIndex)); 
     var ghostOffset:Point = dragInitiator.globalToLocal(new Point(event.stageX, event.stageY)); 
     DragManager.doDrag(dragInitiator, source, event, dragView, ghostOffset.x, ghostOffset.y, 1); 
    } 
} 

private function drawGhost(image:Image):Bitmap 
{ 
    var ghostWidth:int = image.source.width; 
    var ghostHeight:int = image.source.height; 

    var sprite:Sprite = new Sprite(); 
    sprite.graphics.beginFill(0xFF0000, 0.5); 
    sprite.graphics.drawRect(0, 0, ghostWidth, ghostHeight); 
    sprite.graphics.endFill(); 

    var bitmapData:BitmapData = new BitmapData(sprite.width, sprite.height, false); 
    bitmapData.draw(sprite); 
    var bitmap:Bitmap = new Bitmap(bitmapData); 

    return bitmap; 
} 

Но я столкнулся с двумя проблемами:

  1. Если ширина или высота моего призрака составляет более 300 пикселей, на нем появляется градиент прозрачности. Мне это не нужно. Как я могу отключить эту функцию?
  2. Вторая проблема менее важна: перетаскивание элемента дерева вызывает вертикальную прокрутку. Любые идеи, как отключить его?

Gradient пример прозрачности: Gradient transparency example

+0

Можете ли вы описать, что означает «прозрачность градиента»? Это было долгое время, но если я правильно помню, «аватар перетаскивания» (он же «призрак») имеет к нему примененную альфа (прозрачность). Это, я считаю, является визуальной подсказкой, что вы перетаскиваете элемент. Но я бы ожидал, что он должен быть прозрачным независимо от размера объекта. –

+0

Я добавил пример моего «drag avatar». – mpMelnikov

ответ

0

Вы можете отключить verticalScrolling, установив verticalScrollPolicy в положение "выключено".

Что касается «Gradient» -thing: попробуйте изменить курсор для перетаскивания в DragManager в какой-то пользовательский класс.

Смежные вопросы