
谷歌 地图安卓编程接口第 2版 文档翻译:标记,Markers
标记(Markers)用于在地图上指明单个位置。妳可以对标记进行自定义:改变它的默认颜色,或者使用一个自定义图片来替换掉标记中的图标。 信息窗口 可为标记提供额外的上下文信息。
标记用于在地图上指明具体的位置。默认的标记会使用一个标准的图标,它具有与Google Maps 一致的外观。可以通过编程接口来改变图标的颜色、图片或定位点(anchor point)。标记是类型为 Marker 的对象,可使用 GoogleMap.addMarker(markerOptions) 方法来添加到地图中去。
标记补设计为交互式的。它们在默认情况下会接收点击( click )事件,并且经常与事件监听器配套使用以显示出 信息窗口 。将一个标记的可拖放( draggable) 属性设置为真( true) ,就会使得用户能够改变该标记的位置。长按就可以激活移动标记的功能。
以下示例演示了如何向地图中加入一个标记。这个标记被放置在坐标 0,0 处,当它被点击时会在一个信息窗口中显示出字符串"Hello world"。
private GoogleMap mMap ;
mMap = (( MapFragment ) getFragmentManager (). findFragmentById ( R . id . map )). getMap ();
mMap . addMarker ( new MarkerOptions ()
. position ( new LatLng ( 0 , 0 ))
. title ( "Hello world" ));
只要某个标记的 draggable 属性被设置为 true ,那么,当它被添加到地图中去的时候,就可以移动它的位置了。长按标记,就可以启用拖放操作了。当妳的手指离开屏幕时,标记就会呆在它最后的位置。
默认情况下,标记是不可拖动的。妳必须显式地将标记设置为可拖动的:在将标记添加到地图中去之前设置 MarkerOptions.draggable(boolean) ;或者,在将标记添加到地图中去之后,调用 Marker.setDraggable(boolean) 。妳可以监听该标记的拖放事件,具体方法在 标记的拖放事件 中说明。
以下代码片断,在澳大利亚的珀斯添加了一个可拖放的标记。
static final LatLng PERTH = new LatLng (- 31.90 , 115.86 );
Marker melbourne = mMap . addMarker ( new MarkerOptions ()
. position ( PERTH )
. draggable ( true ));
标记可以定义一个自定义的图片,显示在原本会显示默认图标的位置。定义图标的过程,牵涉到一系列能够影响到该标记的视觉外观的属性。
标记支持通过以下属性来进行自定义:
位置 (必需)
以 LatLng 值表示的,该标记在地图上的位置。这是对于一个 Marker 对象的唯一必需的属性。
锚点
图片中,会被对齐到标记的LatLng 位置的那个点。默认值是图片底部的正中位置。
不透明度
设置标记的不透明度。默认值是1.0。
标题
当用户点击标记时显示在信息窗口中的一个字符串。
文字片断
显示在标题下方的额外文字。
图标
一张位图,会显示在原本显示标记图片的位置。
可拖放
如果妳想允许用户移动该标记,则设置为 true 。默认值为 false 。
可见性
设置为 false 就可使该标记不可见。默认值是 true 。
平坦或广告牌式朝向
默认情况下,标记会按照屏幕方向来确定自己的朝向,并且不会随着视角摄像头的角度而旋转或倾斜。平坦的标记,是根据地球表面的角度来确定自己的朝向的,并且会随着视角摄像头的角度而旋转或者倾斜。两种类型的标记都不会随着地图的缩放而改变大小。如果妳需要随着缩放改变大小的话,使用GroundOverlays。
旋转
标记的朝向角度,以顺时针的度数来指定。如果该标记是平坦的,则默认位置会发生改变。对于一个平坦的标记,它的默认位置是按照向北对齐的。如果该标记不是平坦的,则,默认位置是指向上方,并且其旋转角度会使得该标记看起来总是正对视角摄像头的。
以下代码片断,创建一个简单的标记,带有默认图标。
static final LatLng MELBOURNE = new LatLng (- 37.813 , 144.962 );
Marker melbourne = mMap . addMarker ( new MarkerOptions ()
. position ( MELBOURNE ));
可以自定义默认标记图片的颜色,具体做法:向icon()方法中传递一个 BitmapDescriptor 对象。妳可以使用 BitmapDescriptorFactory 对象中的一组预定义好的颜色,或者使用 BitmapDescriptorFactory.defaultMarker(float hue) 方法来设置一个自定义的标记颜色。hue是一个取值范围从0到360的值,代表着一个色轮上的不同点。
static final LatLng MELBOURNE = new LatLng (- 37.813 , 144.962 );
Marker melbourne = mMap . addMarker ( new MarkerOptions ()
. position ( MELBOURNE )
. icon ( BitmapDescriptorFactory . defaultMarker ( BitmapDescriptorFactory . HUE_AZURE )));
妳可以使用MarkerOptions.alpha()方法来控制一个标记的不透明度。不透明度是指从0.0 到1.0 的一个浮点数值,其中,0表示完全透明,1表示完全不透明。
static final LatLng MELBOURNE = new LatLng (- 37.813 , 144.962 );
Marker melbourne = mMap . addMarker ( new MarkerOptions ()
. position ( MELBOURNE )
. alpha ( 0.7f ));
妳可以使用一个自定义的标记图片来替换掉默认的标记图片,这个通常称作图标。自定义图标是以一个 BitmapDescriptor 的形式设置的,并且是使用 BitmapDescriptorFactory 类中 4个方法之1来定义的。
fromAsset(String assetName)
使用assets 目录中的一个图片来创建一个自定义标记。
fromBitmap (Bitmap image)
使用一个Bitmap 图片来创建一个自定义标记。
fromFile (String path)
使用指定路径path 的文件来创建一个自定义标记。
fromResource (int resourceId)
使用一个已有的资源来创建一个自定义标记。
以下代码片断,使用一个自定义图标创建了一个标记。
private static final LatLng MELBOURNE = new LatLng (- 37.813 , 144.962 );
private Marker melbourne = mMap . addMarker ( new MarkerOptions ()
. position ( MELBOURNE )
. title ( "Melbourne" )
. snippet ( "Population: 4,137,400" )
. icon ( BitmapDescriptorFactory . fromResource ( R . drawable . arrow )));
标记图标通常是相对于屏幕状态来绘制的;旋转、倾斜或者缩放地图的动作不会改变标记的朝向。妳可以将标记的朝向设置为针对地球表面的平坦型朝向。以这种方式设置朝向的标记,会在地图被旋转的时候对应地旋转,在地图被倾斜的时候改变它的透视效果。平坦的标记,会在地图被缩放时保持它们的尺寸。
要改变标记的朝向特征的话,就将该标记的 flat 属性设置为 true 。
static final LatLng PERTH = new LatLng (- 31.90 , 115.86 );
Marker perth = mMap . addMarker ( new MarkerOptions ()
. position ( PERTH )
. flat ( true ));
妳可以使用 Marker . setRotation() 方法来让一个标记围绕着它的锚点旋转。旋转角度是以默认位置为基础,作顺时针旋转,度量单位是度。如果标记是平坦型的,则默认位置就是正北。如果标记不是平坦型的,则,默认位置是指向上方,并且旋转角度看起来是该标记正对着视角摄像头。
以下代码片断,将标记旋转了90°。将锚点设置为 0.5,0.5 ,使得该标记围绕着中心点旋转,而不是底部中心点。
static final LatLng PERTH = new LatLng (- 31.90 , 115.86 );
Marker perth = mMap . addMarker ( new MarkerOptions ()
. position ( PERTH )
. anchor ( 0.5 , 0.5 )
. rotation ( 90.0 ));
地图编程接口使得妳可以监听并且对标记的事件作出响应。要想监听这些事件的话,妳必须给那些标记所属的 GoogleMap 对象设置对应的监听器。当事件在地图上某个标记上发生时,监听器的回调函数会被调用,并且会将对应的 Marker 对象作为一个参数传入。要想将传入的 Marker 对象与妳自己之前记录的 Marker 对象作比较的话,必须使用 equals() ,而不能使用 == 。
妳可以监听以下事件:
•.标记的点击事件
•.标记的拖放事件
•. 信息窗口的点击事件
妳可以使用一个 OnMarkerClickListener 来监听针对标记的点击事件。要将这个监听器设置到地图上,就调用 GoogleMap.setOnMarkerClickListener(OnMarkerClickListener) 。当用户点击某个标记时, onMarkerClick(Marker) 会被调用,并且被点击的标记对象会作为参数传入。这个方法返回一个逻辑值,表明妳是否已经消化了该事件(也就是说,妳想要禁止默认的行为)。如果它返回 false ,则,除了妳的自定义行为之外,默认行为也会发生。对于标记的点击事件,默认行为是,显示它的 信息窗口 (如果有的话)并且移动视角摄像头使得该标记位于地图的正中心。
妳可以使用一个 OnMarkerDragListener 来监听对于某个标记的拖放事件。要将这个监听器设置到地图上,就调用 GoogleMap.setOnMarkerDragListener 。要想拖放一个标记的话,用户必须长按该标记。当用户松开手指时,标记就会呆在该位置。当一个标记被拖动时,最初会调用 onMarkerDragStart(Marker) 。当该标记正在被拖动时,会频繁地调用 onMarkerDrag(Marker) 。在拖放动作的最后,会调用 onMarkerDragEnd(Marker) 。妳可以在任何时候调用 Marker.getPosition() 来获取该标记的位置。
注意: 默认情况下,标记是不可拖动的。一个标记必须被显式设置为可拖动的,才能被用户拖动。可用两种方法将它设置为可拖动的:在将它添加到地图之前使用 MarkerOptions.draggable(boolean) ;或者,在将它添加到地图之后使用 Marker.setDraggable(boolean) 。
温家宝的保镖
谷歌 地图安卓编程接口第 2版 文档翻译:标记,Markers
标记(Markers)用于在地图上指明单个位置。妳可以对标记进行自定义:改变它的默认颜色,或者使用一个自定义图片来替换掉标记中的图标。 信息窗口 可为标记提供额外的上下文信息。
标记用于在地图上指明具体的位置。默认的标记会使用一个标准的图标,它具有与Google Maps 一致的外观。可以通过编程接口来改变图标的颜色、图片或定位点(anchor point)。标记是类型为 Marker 的对象,可使用 GoogleMap.addMarker(markerOptions) 方法来添加到地图中去。
标记补设计为交互式的。它们在默认情况下会接收点击( click )事件,并且经常与事件监听器配套使用以显示出 信息窗口 。将一个标记的可拖放( draggable) 属性设置为真( true) ,就会使得用户能够改变该标记的位置。长按就可以激活移动标记的功能。
以下示例演示了如何向地图中加入一个标记。这个标记被放置在坐标 0,0 处,当它被点击时会在一个信息窗口中显示出字符串"Hello world"。
private GoogleMap mMap ;
mMap = (( MapFragment ) getFragmentManager (). findFragmentById ( R . id . map )). getMap ();
mMap . addMarker ( new MarkerOptions ()
. position ( new LatLng ( 0 , 0 ))
. title ( "Hello world" ));
只要某个标记的 draggable 属性被设置为 true ,那么,当它被添加到地图中去的时候,就可以移动它的位置了。长按标记,就可以启用拖放操作了。当妳的手指离开屏幕时,标记就会呆在它最后的位置。
默认情况下,标记是不可拖动的。妳必须显式地将标记设置为可拖动的:在将标记添加到地图中去之前设置 MarkerOptions.draggable(boolean) ;或者,在将标记添加到地图中去之后,调用 Marker.setDraggable(boolean) 。妳可以监听该标记的拖放事件,具体方法在 标记的拖放事件 中说明。
以下代码片断,在澳大利亚的珀斯添加了一个可拖放的标记。
static final LatLng PERTH = new LatLng (- 31.90 , 115.86 );
Marker melbourne = mMap . addMarker ( new MarkerOptions ()
. position ( PERTH )
. draggable ( true ));
标记可以定义一个自定义的图片,显示在原本会显示默认图标的位置。定义图标的过程,牵涉到一系列能够影响到该标记的视觉外观的属性。
标记支持通过以下属性来进行自定义:
位置 (必需)
以 LatLng 值表示的,该标记在地图上的位置。这是对于一个 Marker 对象的唯一必需的属性。
锚点
图片中,会被对齐到标记的LatLng 位置的那个点。默认值是图片底部的正中位置。
不透明度
设置标记的不透明度。默认值是1.0。
标题
当用户点击标记时显示在信息窗口中的一个字符串。
文字片断
显示在标题下方的额外文字。
图标
一张位图,会显示在原本显示标记图片的位置。
可拖放
如果妳想允许用户移动该标记,则设置为 true 。默认值为 false 。
可见性
设置为 false 就可使该标记不可见。默认值是 true 。
平坦或广告牌式朝向
默认情况下,标记会按照屏幕方向来确定自己的朝向,并且不会随着视角摄像头的角度而旋转或倾斜。平坦的标记,是根据地球表面的角度来确定自己的朝向的,并且会随着视角摄像头的角度而旋转或者倾斜。两种类型的标记都不会随着地图的缩放而改变大小。如果妳需要随着缩放改变大小的话,使用GroundOverlays。
旋转
标记的朝向角度,以顺时针的度数来指定。如果该标记是平坦的,则默认位置会发生改变。对于一个平坦的标记,它的默认位置是按照向北对齐的。如果该标记不是平坦的,则,默认位置是指向上方,并且其旋转角度会使得该标记看起来总是正对视角摄像头的。
以下代码片断,创建一个简单的标记,带有默认图标。
static final LatLng MELBOURNE = new LatLng (- 37.813 , 144.962 );
Marker melbourne = mMap . addMarker ( new MarkerOptions ()
. position ( MELBOURNE ));
可以自定义默认标记图片的颜色,具体做法:向icon()方法中传递一个 BitmapDescriptor 对象。妳可以使用 BitmapDescriptorFactory 对象中的一组预定义好的颜色,或者使用 BitmapDescriptorFactory.defaultMarker(float hue) 方法来设置一个自定义的标记颜色。hue是一个取值范围从0到360的值,代表着一个色轮上的不同点。
static final LatLng MELBOURNE = new LatLng (- 37.813 , 144.962 );
Marker melbourne = mMap . addMarker ( new MarkerOptions ()
. position ( MELBOURNE )
. icon ( BitmapDescriptorFactory . defaultMarker ( BitmapDescriptorFactory . HUE_AZURE )));
妳可以使用MarkerOptions.alpha()方法来控制一个标记的不透明度。不透明度是指从0.0 到1.0 的一个浮点数值,其中,0表示完全透明,1表示完全不透明。
static final LatLng MELBOURNE = new LatLng (- 37.813 , 144.962 );
Marker melbourne = mMap . addMarker ( new MarkerOptions ()
. position ( MELBOURNE )
. alpha ( 0.7f ));
妳可以使用一个自定义的标记图片来替换掉默认的标记图片,这个通常称作图标。自定义图标是以一个 BitmapDescriptor 的形式设置的,并且是使用 BitmapDescriptorFactory 类中 4个方法之1来定义的。
fromAsset(String assetName)
使用assets 目录中的一个图片来创建一个自定义标记。
fromBitmap (Bitmap image)
使用一个Bitmap 图片来创建一个自定义标记。
fromFile (String path)
使用指定路径path 的文件来创建一个自定义标记。
fromResource (int resourceId)
使用一个已有的资源来创建一个自定义标记。
以下代码片断,使用一个自定义图标创建了一个标记。
private static final LatLng MELBOURNE = new LatLng (- 37.813 , 144.962 );
private Marker melbourne = mMap . addMarker ( new MarkerOptions ()
. position ( MELBOURNE )
. title ( "Melbourne" )
. snippet ( "Population: 4,137,400" )
. icon ( BitmapDescriptorFactory . fromResource ( R . drawable . arrow )));
标记图标通常是相对于屏幕状态来绘制的;旋转、倾斜或者缩放地图的动作不会改变标记的朝向。妳可以将标记的朝向设置为针对地球表面的平坦型朝向。以这种方式设置朝向的标记,会在地图被旋转的时候对应地旋转,在地图被倾斜的时候改变它的透视效果。平坦的标记,会在地图被缩放时保持它们的尺寸。
要改变标记的朝向特征的话,就将该标记的 flat 属性设置为 true 。
static final LatLng PERTH = new LatLng (- 31.90 , 115.86 );
Marker perth = mMap . addMarker ( new MarkerOptions ()
. position ( PERTH )
. flat ( true ));
妳可以使用 Marker . setRotation() 方法来让一个标记围绕着它的锚点旋转。旋转角度是以默认位置为基础,作顺时针旋转,度量单位是度。如果标记是平坦型的,则默认位置就是正北。如果标记不是平坦型的,则,默认位置是指向上方,并且旋转角度看起来是该标记正对着视角摄像头。
以下代码片断,将标记旋转了90°。将锚点设置为 0.5,0.5 ,使得该标记围绕着中心点旋转,而不是底部中心点。
static final LatLng PERTH = new LatLng (- 31.90 , 115.86 );
Marker perth = mMap . addMarker ( new MarkerOptions ()
. position ( PERTH )
. anchor ( 0.5 , 0.5 )
. rotation ( 90.0 ));
地图编程接口使得妳可以监听并且对标记的事件作出响应。要想监听这些事件的话,妳必须给那些标记所属的 GoogleMap 对象设置对应的监听器。当事件在地图上某个标记上发生时,监听器的回调函数会被调用,并且会将对应的 Marker 对象作为一个参数传入。要想将传入的 Marker 对象与妳自己之前记录的 Marker 对象作比较的话,必须使用 equals() ,而不能使用 == 。
妳可以监听以下事件:
•.标记的点击事件
•.标记的拖放事件
•. 信息窗口的点击事件
妳可以使用一个 OnMarkerClickListener 来监听针对标记的点击事件。要将这个监听器设置到地图上,就调用 GoogleMap.setOnMarkerClickListener(OnMarkerClickListener) 。当用户点击某个标记时, onMarkerClick(Marker) 会被调用,并且被点击的标记对象会作为参数传入。这个方法返回一个逻辑值,表明妳是否已经消化了该事件(也就是说,妳想要禁止默认的行为)。如果它返回 false ,则,除了妳的自定义行为之外,默认行为也会发生。对于标记的点击事件,默认行为是,显示它的 信息窗口 (如果有的话)并且移动视角摄像头使得该标记位于地图的正中心。
妳可以使用一个 OnMarkerDragListener 来监听对于某个标记的拖放事件。要将这个监听器设置到地图上,就调用 GoogleMap.setOnMarkerDragListener 。要想拖放一个标记的话,用户必须长按该标记。当用户松开手指时,标记就会呆在该位置。当一个标记被拖动时,最初会调用 onMarkerDragStart(Marker) 。当该标记正在被拖动时,会频繁地调用 onMarkerDrag(Marker) 。在拖放动作的最后,会调用 onMarkerDragEnd(Marker) 。妳可以在任何时候调用 Marker.getPosition() 来获取该标记的位置。
注意: 默认情况下,标记是不可拖动的。一个标记必须被显式设置为可拖动的,才能被用户拖动。可用两种方法将它设置为可拖动的:在将它添加到地图之前使用 MarkerOptions.draggable(boolean) ;或者,在将它添加到地图之后使用 Marker.setDraggable(boolean) 。
温家宝的保镖
HxLauncher: Launch Android applications by voice commands