StupidBeauty
Read times:1063Posted at:Tue Feb 25 21:48:01 2014
- no title specified

谷歌 地图安卓编程接口第 2版 文档翻译:标记,Markers

标记(Markers)用于在地图上指明单个位置。妳可以对标记进行自定义:改变它的默认颜色,或者使用一个自定义图片来替换掉标记中的图标。 信息窗口 可为标记提供额外的上下文信息。

内容目录

介绍

添加一个标记

使得一个标记可拖动

自定义一个标记

自定义标记的颜色

自定义标记的不透明度

自定义标记图片

将一个标记平坦化

旋转一个标记

标记事件

标记的点击事件

标记的拖动事件

  1. 1.

介绍

标记用于在地图上指明具体的位置。默认的标记会使用一个标准的图标,它具有与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)用于在地图上指明单个位置。妳可以对标记进行自定义:改变它的默认颜色,或者使用一个自定义图片来替换掉标记中的图标。 信息窗口 可为标记提供额外的上下文信息。

内容目录

介绍

添加一个标记

使得一个标记可拖动

自定义一个标记

自定义标记的颜色

自定义标记的不透明度

自定义标记图片

将一个标记平坦化

旋转一个标记

标记事件

标记的点击事件

标记的拖动事件

  1. 1.

介绍

标记用于在地图上指明具体的位置。默认的标记会使用一个标准的图标,它具有与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)

温家宝的保镖

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands