用了Google Street View的话,很熟悉那个人形,可以拖拽的,那么在 Flex API中怎么实现拖动某个Graphic呢?
如果用过ArcGIS Flex API中Drag Polygon查询例子的同行会知道,用这个例子修改一下就可以实现,但是,细心的同行可能会注意用Drage Polygon时,拖动Polygon会很卡,特别是鼠标移动太快时就会很卡。
不过,这个问题被解决了。
理解一下这段代码,你就会有收获。现在拖动Graphic时不会再卡,而且效率很高。
private function addListeners():void
{
panoGraphic.addEventListener(MouseEvent.MOUSE_UP,panoGraphicMouseUpEventHandler);
myMap.addEventListener(MouseEvent.MOUSE_UP,mapMouseUpEventHandler);
panoGraphic.addEventListener(MouseEvent.MOUSE_DOWN, panoGraphicMouseDownEventHandler);
}
public function panoGraphicMouseDownEventHandler(event:MouseEvent):void
{
try
{
myMap.panEnabled = false;
panoGraphic.addEventListener(MouseEvent.MOUSE_MOVE, dragShapeEventHandler);
myMap.addEventListener(MouseEvent.MOUSE_MOVE, dragShapeEventHandler);
}
catch(err:Error)
{
}
}
//handle a mouseup event on the map
public function panoGraphicMouseUpEventHandler(event:MouseEvent):void
{
try
{
myMap.panEnabled = true;
panoGraphic.symbol = pano;
panoGraphic.removeEventListener(MouseEvent.MOUSE_MOVE, dragShapeEventHandler);
myMap.removeEventListener(MouseEvent.MOUSE_MOVE, dragShapeEventHandler);
}
catch(err:Error)
{
}
}
//as the polygon gets dragged, remove old Graphic children and create new Graphic
public function dragShapeEventHandler(event:MouseEvent):void
{
myMap.panEnabled = false;
var arr1:Array = new Array(); //a temporary array
var mapPointFromStage:MapPoint = myMap.toMapFromStage(event.stageX,event.stageY);
panoGraphic.geometry = mapPointFromStage;
panoGraphic.symbol = panoDrag;
}
public function mapMouseOverEventHandler(event:MouseEvent):void
{
try
{
if(event.target.geometry.type == "esriGeometryPoint")
{
myMap.panEnabled = false;
}
}
catch(err:Error)
{
}
}
public function mapMouseUpEventHandler(event:MouseEvent):void
{
try
{
panoGraphic.symbol = pano;
panoGraphic.removeEventListener(MouseEvent.MOUSE_MOVE, dragShapeEventHandler);
}
catch(err:Error)
{
}
}