控件
地图控件概述
百度地图上负责与地图交互的UI元素称为控件。百度地图API中提供了丰富的控件,您还可以通过Control类来实现自定义控件。
地图API中提供的控件有:
Control:控件的抽象基类,所有控件均继承此类的方法、属性。通过此类您可实现自定义控件。
Navigator:地图平移控件,默认位于地图左上方,它包含控制地图平移的功能。
Scaler:地图缩放控件,默认位于地图左上方,它包含控制地图缩放的功能。
Overview:地图缩略图控件,默认位于地图右下方,是一个可折叠的缩略地图。
Ruler:地图比例尺控件,默认位于地图左下方,显示地图的比例关系。
Copyright:地图版权控件,默认位于地图左下方。
向地图添加控件
可以使用Map对象的addControl()方法向地图添加控件。在此之前地图需要进行初始化。例如,要将标准地图控件添加到地图中,可在代码中添加如下内容:
// 添加Navigator var nav:Navigator = new Navigator(map); map.addControl(nav); // 添加Overview var overview:Overview = new Overview(map); map.addControl(overview); // 添加Scaler var scaler:Scaler = new Scaler(map); map.addControl(scaler); // 添加Ruler var ruler:Ruler = new Ruler(map); map.addControl(ruler);
控制控件位置
初始化控件后,可以设置控件的anchor和offset属性。anchor和offset属性共同控制控件在地图上的位置。
控件停靠位置
anchor表示控件的停靠位置,即控件停靠在地图的哪个角。当地图尺寸发生变化时,控件会根据停靠位置的不同来调整自己的位置。anchor允许的值为:
Anchor.TL 表示控件定位于地图的左上角。
Anchor.TR 表示控件定位于地图的右上角。
Anchor.BL 表示控件定位于地图的左下角。
Anchor.BR 表示控件定位于地图的右下角。
Anchor.TC 表示控件定位于地图的上中方。
Anchor.BC 表示控件定位于地图的下中方。
Anchor.LC 表示控件定位于地图的左中方。
Anchor.RC 表示控件定位于地图的右中方。
控件位置偏移
除了指定停靠位置外,还可以通过偏移量来指示控件距离地图边界有多少像素。如果两个控件的停靠位置相同,那么控件可能会重叠在一起,这时就可以通过偏移值使二者分开显示。
如下,让比例尺控件向右偏移100像素:
var ruler:Ruler = new Ruler(map); ruler.offset = new Size(100, 0); map.addControl(ruler);
自定义控件
百度地图Flash API允许您通过继承Control来创建自定义地图控件。
要创建可用的自定义控件,您需要做以下工作:
定义一个自定义控件并继承Control。
在构造函数里可以设置自定义控件默认的anchor和offset。
重写create、destroy和dispose函数。其中create是控件添加到舞台后的响应函数;destroy是控件移出舞台后的响应函数;dispose是销毁控件的函数,在dispose里做释放资源的操作。
自定义控件并继承自Control
如下代码:
import baidu.map.core.Map; import baidu.map.control.Control; package{ public class MyControl extends Control{ public function MyControl(map:Map){ super(map); // 设置默认的anchor和offset // 赋值_anchor和 _offset _anchor = Anchor.TL; _offset = new Size(0, 0); } } // dispose函数里释放资源 override public function dispose():void{ // TODO... } // Event.ADDED_TO_STAGE事件的响应函数 override protected function create(evt:Event = null):void{ // TODO... } // Event.REMOVED_FROM_STAGE事件的响应函数 override protected function destroy(evt:Event = null):void{ // TODO... } }
添加自定义控件
添加自定义控件与添加其他控件方法一致,调用map.addControl()方法即可。
// 创建控件实例 var myCtrl:MyControl = new MyControl(map); // 添加到地图当中 map.addControl(myCtrl);
自定义控件实现请参看相关下载提供的示例Demo。