我有一个自定义的dragImage(一个带边框和标签的简单容器),默认的alpha值为0.5
拖动源是一个Spark DataGrid dropTarget是一个带有Form
的BorderContainer在dropTarget的onDragEnter处理程序中我想将dragImage alpha设置为1,以获得该组件是有效dropTarget的视觉反馈。
我无法找到一种方法来访问处理程序中的dragImage:
private function onDragEnterActivity(ev:DragEvent):void {
if (ev.dragSource.hasFormat('dragActivity')) {
//i would like to access the dragImage here to set its alpha to 1
var dropTarget:BorderContainer = BorderContainer(ev.currentTarget);
DragManager.acceptDragDrop(dropTarget);
}
}
似乎是在doDrag函数
中定义(或默认值)后的alpha值rest fix答案 0 :(得分:1)
查看DragManager源代码我找到了一个解决方案,使用DragManager的mx_internal get dragProxy来获取dragImage
public namespace mx_internal="http://www.adobe.com/2006/flex/mx/internal";
private function onDragEnter(ev:DragEvent):void {
if (ev.dragSource.hasFormat('trackingDrag')) {
var dP:IFlexDisplayObject = DragManager.mx_internal::dragProxy;
dP.alpha = 1;
var dropTarget:BorderContainer = BorderContainer(ev.currentTarget);
DragManager.acceptDragDrop(dropTarget);
}
}
private function onDragExit(ev:DragEvent):void {
var dP:IFlexDisplayObject = DragManager.mx_internal::dragProxy;
dP.alpha = 0.5;
}
我用
public namespace mx_internal="http://www.adobe.com/2006/flex/mx/internal";
因为它是一个mxml文件
在ActionScript类中应该是
import mx.core.mx_internal;
use namespace mx_internal;
答案 1 :(得分:0)
这是我的解决方案,它有效!
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="init(event)">
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.core.IUIComponent;
import mx.events.DragEvent;
import mx.events.FlexEvent;
import mx.managers.DragManager;
[Bindable]private var dp:ArrayCollection = new ArrayCollection();
protected function init(event:FlexEvent):void
{
for (var i:int = 0; i < 3; i++)
{
var label:Object = new Object();
label.title = "Hello_" + i.toString();
dp.addItem(label);
}
}
private function onDragEnter(event:DragEvent):void
{
event.preventDefault();
DragManager.acceptDragDrop(event.target as IUIComponent);
DragManager.showFeedback(DragManager.LINK);
var borderContainer:BorderContainer = event.currentTarget as BorderContainer;
borderContainer.alpha = 1.0;
}
private function onDragOver(event:DragEvent):void
{
event.preventDefault();
}
protected function onDragDrop(event:DragEvent):void
{
try
{
var borderContainer:BorderContainer = event.currentTarget as BorderContainer;
borderContainer.alpha = 0.1;
var dataObj:Object = event.dragSource.dataForFormat("itemsByIndex")[0] as Object;
var la:Label = new Label();
la.text = dataObj.title;
trace();
bcMain.addElement(la);
}
catch (err:Error)
{
}
}
]]>
</fx:Script>
<s:HGroup x="20" y="20" height="100">
<s:VGroup width="200" height="100%">
<s:Label text="From:"/>
<s:List id="srclist" dataProvider="{dp}"
width="100%" height="100%"
allowMultipleSelection="true"
dragEnabled="true"
dragMoveEnabled="true">
<s:itemRenderer>
<fx:Component>
<s:ItemRenderer>
<s:Label text="{data.title}"/>
</s:ItemRenderer>
</fx:Component>
</s:itemRenderer>
</s:List>
</s:VGroup>
<s:Spacer width="20"/>
<s:VGroup width="200" height="100%">
<s:Label text="To:"/>
<s:BorderContainer
id="bcMain"
width="100%"
height="100%"
borderStyle="solid"
dragEnter="onDragEnter(event)"
dragOver="onDragOver(event)"
dragDrop="onDragDrop(event)"
backgroundImage="@Embed(source='/assets/pic/sunset.jpg')"
alpha="0.1">
<s:layout>
<s:VerticalLayout/>
</s:layout>
</s:BorderContainer>
</s:VGroup>
</s:HGroup>
</s:Application>