arcgis api for flex 高级主题(二) 自定义控件的开发
上一篇 / 下一篇 2008-10-19 08:27:23 / 个人分类:mushup
3sNews.Net——3S社区&资讯平台2^UJ&hm0x)|2s
h_*j#VM3Ie6188arcgis api for flex 本身只提供了Navigation和ScaleBar两个控件,并且api中
对如何开发自定义的控件做详细的描述(也可能有,是我没找到)、
3c/d*YO@6188下面就介绍一下我的方法。以实现一个能在地图上动态显示当前鼠标经纬度的控
件。
Qkt$\:a,b61881 定义控件类,集成UIComponent ,实现IMapAware接口
o2P4s^|'b)n61882 重载createChildren函数3sNews.Net——3S社区&资讯平台pIB$p;n
P9v
3 实现public function set map(map:Map) : void 函数3sNews.Net——3S社区&资讯平台4z:[B~^\.Su0C
4 添加自己的功能代码3sNews.Net——3S社区&资讯平台RI$T\ctz LP%xW
直接放代码
Flash:demo3sNews.Net——3S社区&资讯平台.xT
m(h'aBVcNy'a
R;vp7R8Y(} ?D!Wl6188package com.esri
9UQUD+C6188{3sNews.Net——3S社区&资讯平台^-K4~)}XC
import com.esri.ags.*;
-Y7| p&Hl?3Db6188 import com.esri.ags.events.*;3sNews.Net——3S社区&资讯平台SeWss]:ga
import com.esri.ags.geometry.MapPoint;
K)r7}XO~6188 import com.esri.ags.utils.*;3sNews.Net——3S社区&资讯平台m4IE_9z|oSa
import flash.display.*;
"]-@^iSx8d*s
x6188 import flash.events.MouseEvent;
1w}+ia&J}6188 import flash.filters.*;3sNews.Net——3S社区&资讯平台H6g-?a*Ov~%WX,{
import flash.text.*;3sNews.Net——3S社区&资讯平台o?vN
KOvA
import flash.geom.Point;
)eqm8Dw6188 import mx.core.*;3sNews.Net——3S社区&资讯平台E"s%Xd XR`G7t
import mx.events.*;
A&Rl
e%Xk&N[?f6188 public class ESRIStatusBar extends UIComponent implements
IMapAware
6C3uK?"Ni7V6188 {
/n$T@ju q2o6u6188 private var m_map:Map;3sNews.Net——3S社区&资讯平台;m*W^+nUdj,r
private var m_stateLabel:TextField;
$C
b
CCs6188 public function ESRIStatusBar()3sNews.Net——3S社区&资讯平台s3s0l4`E
K F
{3sNews.Net——3S社区&资讯平台'aW`&JTx-o
m_stateLabel = new TextField();3sNews.Net——3S社区&资讯平台lD"X&i+_T4]
m_stateLabel.width = 152;
Zp_{z1U*xQLe6188 }3sNews.Net——3S社区&资讯平台OM-O*Fy TM:R
U
override protected function updateDisplayList(log:Number,
pow:Number) : void
{!A$jz n6188 {3sNews.Net——3S社区&资讯平台x.a"O,t.qFa#H1Y
super.updateDisplayList(log, pow);3sNews.Net——3S社区&资讯平台|s$DcV4y
return;
$A6]H&|`9z6188 }// end function
,PuE4|/t6188 override protected function createChildren() : void3sNews.Net——3S社区&资讯平台:J_)`g4B'P
{
Y3IF3Tp"Bc*D)Z-q.H6188 super.createChildren();
$b-]'Z}4p)u}(|/]8u6188 3sNews.Net——3S社区&资讯平台m%W0j K1\'[1Y8Q3M.L
var pnt:Point = new Point;3sNews.Net——3S社区&资讯平台:Y7Hp1Iow,N4v
if(m_map.loaded)3sNews.Net——3S社区&资讯平台3\|^QP7j(p
{3sNews.Net——3S社区&资讯平台S#h,v V)y
var mapPnt:MapPoint = new MapPoint
(m_map.extent.xmax,m_map.extent.ymin);
4uc%RO@)Y't6188 pnt = m_map.toScreen(mapPnt);
U`7]q]~*Z6188 m_stateLabel.x = pnt.x-150;3sNews.Net——3S社区&资讯平台'^c"{ln:D8bV
m_stateLabel.y = pnt.y-16;
7Hs-a*At2g8M3I6188 }
8[2M3c3M-I`"hUW*D6188
Z3EX"kY6188
#i&NcsXygk+G6188 3sNews.Net——3S社区&资讯平台9C8Y8x;n/o8C
addChild(m_stateLabel);
return;3sNews.Net——3S社区&资讯平台*MGO+o8vUi
}// end function3sNews.Net——3S社区&资讯平台!oYZ;CeZ
private function mouseMoveHandler
(event:MouseEvent):void3sNews.Net——3S社区&资讯平台OQ&o o
XF4lkwk_
{
:@3q6Jk(Z f`^O
j0Q6188 if(m_map)
{V~H'yW.J6188 {
$W6J^m2BLv6188 if(m_map.loaded)3sNews.Net——3S社区&资讯平台 F/o C&f&E
{3sNews.Net——3S社区&资讯平台-Y$uN*u(rC_
var mapPoint : MapPoint =
m_map.toMapFromStage(event.stageX, event.stageY);3sNews.Net——3S社区&资讯平台&R7d@/{)ft
m_stateLabel.text =
"x="+mapPoint.x.toString()+" , y="+mapPoint.y.toString();
&o4h
lU8R6188 }
L5uCyE*I6188 }3sNews.Net——3S社区&资讯平台3^/]+P2h0\4O
wT
}
5YW_*Ea~A6188 private function extentChangeHandler
(event:ExtentEvent):void3sNews.Net——3S社区&资讯平台(OEH+x]9K!_2P
{
bXf_'IG4R6188 var pnt:Point = new Point;
'}.g1pXNfQ$cz4V6188 var mapPnt:MapPoint = new MapPoint
(m_map.extent.xmax,m_map.extent.ymin);
`8Q{g Vv\o.P6188 pnt = m_map.toScreen(mapPnt);
Dxi!F
b4j$j-|%G6188
W%F0B7dy/g6188 m_stateLabel.x = pnt.x-150;3sNews.Net——3S社区&资讯平台,Q0RZAon6rbk1\2C
m_stateLabel.y = pnt.y-16;3sNews.Net——3S社区&资讯平台(Zct+f2y.J(v]!\
}3sNews.Net——3S社区&资讯平台){z@yD@
public function set map(map:Map) : void
t8be!f$},[s l6188 {3sNews.Net——3S社区&资讯平台(@!@lPux
m_map = map;3sNews.Net——3S社区&资讯平台i5ic7i#tXe3_R E
m_map.addEventListener
(MouseEvent.MOUSE_MOVE,mouseMoveHandler);
f/e3m7D
_5WM6188 m_map.addEventListener(ExtentEvent.EXTENT_CHANGE,
extentChangeHandler);
)IF2r0^@6188 }// end function3sNews.Net——3S社区&资讯平台b1tu$O&|
}
@3DT!R;V"~n6188}
把这个控件添加到map上3sNews.Net——3S社区&资讯平台
` C2b&?~7qV&qh
var statusBar:ESRIStatusBar = new ESRIStatusBar();
k~?Nb;X$\h6188 IMapAware(statusBar).map = EsriMap;3sNews.Net——3S社区&资讯平台`4^c |%x4Q0\5~-|
EsriMap.addChild(statusBar);
|LQVk1L6188放代码
S;L7UT${#|hf6188<?xml version="1.0" encoding="utf-8"?>3sNews.Net——3S社区&资讯平台G
EBA!N+t.w$]
<mx:Application
6NK2@2KL+yBl|6188 xmlns:mx="http://www.adobe.com/2006/mxml"
g5l*D/n#`6188 xmlns:esri="http://www.esri.com/2008/ags"
Z2n*?;akE6188 styleName="plain" >
{"L+|
_"Oh|'^%fa6188 <mx:Script>
,|z,O!x~vw&p6188 <![CDATA[
h
R9Vsf6188 import com.esri.*;