第五步:自定义地图的图层
接下来,我们需要为地图多增加一些自定义的功能,比如可以在地图上进行一些标注。为了实现这样的功能,我们可以继承Overlay这个类,这个类是一个基类,提供了可以在地图上添加图层的基本功能。而另外的选择是,我们可以继承itemzedOverlay这个类,
它提供了一种快捷的方法,可以把标记图片和相关的文本分配给特定的地理位置。ItemizedOverlay实例可以处理每一个OverlayItem(OverlayItem可以简单理解为在地图上的每一个标记)标记的绘制、放置、单击处理、焦点控制和布局优化。下面我们看代码:
package com.javacodegeeks.android.googlemaps;
import java.util.ArrayList;
import android.app.AlertDialog;
import android.content.Context;
import android.graphics.drawable.Drawable;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.OverlayItem;
public class CustomItemizedOverlay extends ItemizedOverlay<OverlayItem> {
private ArrayList<OverlayItem> mapOverlays = new ArrayList<OverlayItem>();
private Context context;
public CustomItemizedOverlay(Drawable defaultMarker) {
super(boundCenterBottom(defaultMarker));
}
public CustomItemizedOverlay(Drawable defaultMarker, Context context) {
this(defaultMarker);
this.context = context;
}
@Override
protected OverlayItem createItem(int i) {
return mapOverlays.get(i);
}
@Override
public int size() {
return mapOverlays.size();
}
@Override
protected boolean onTap(int index) {
OverlayItem item = mapOverlays.get(index);
AlertDialog.Builder dialog = new AlertDialog.Builder(context);
dialog.setTitle(item.getTitle());
dialog.setMessage(item.getSnippet());
dialog.show();
return true;
}
public void addOverlay(OverlayItem overlay) {
mapOverlays.add(overlay);
this.populate();
}
}
在这个类中,需要在构造函数中使用Drawable类,这将被用作来绘制一个标记。此外,我们使用ArrayList去保存所有的Overlayitems,而createitem和size方法则容易理解了,分别是返回每一个Overlayitem和返回目前的所有标记的数目。而onTap方法则是在当某个标记在地图上真正标注时所触发的,比如当在触摸屏上点击时,也可以触发该事件。在这个例子中,我们只是通过弹出对话框的方法展示给用户看。最后,在addOverlay方法中,我们向标记数组mapOverlays中增加一个overlayitem标记,并且调用populate方法将其展示出来。
接下来我们看下如何使用上面的这个类,将代码修改如下:
package com.javacodegeeks.android.googlemaps;
import java.util.List;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;
public class GMapsActivity extends MapActivity {
private MapView mapView;
private static final int latitudeE6 = 37985339;
private static final int longitudeE6 = 23716735;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mapView = (MapView) findViewById(R.id.map_view);
mapView.setBuiltInZoomControls(true);
List<OVERLAY> mapOverlays = mapView.getOverlays();
Drawable drawable = this.getResources().getDrawable(R.drawable.icon);
CustomItemizedOverlay itemizedOverlay =
new CustomItemizedOverlay(drawable, this);
GeoPoint point = new GeoPoint(latitudeE6, longitudeE6);
OverlayItem overlayitem =
new OverlayItem(point, "Hello", "I'm in Athens, Greece!");
itemizedOverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedOverlay);
MapController mapController = mapView.getController();
mapController.animateTo(point);
mapController.setZoom(6);
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
}
在上面的代码中,我们实例化了CustomItemizedOverlay类,并为其构造函数传入了Android默认的Drawable类的实例进行初始化,接下来,我们用一个预先定义好的经纬度去实例化一个GeoPoint类,GeoPoint类表示一个具体的位置。然后再用这个geopoint类的实例去初始化OverlayItem对象的实例,并且传入一段文本,这样就产生了一个完整的地图上的标记了,最后把这个标记加入到图层中去,这是通过调用CustomItemizedOverlay类的addOverlay去实现的,最后该标记就会出现在地图上了。
最后,我们调用了MapController这个工具类去控制地图的缩放,将地图缩放到由
GeoPoint类的实例指定区域的位置(使用的是animateTo方法),并用setZoom()方法指定了放大的级别。
运行程序后,可以看到在地图上只显示了指定区域大小的地图,并且看到了标记,当你点击标记时,可以看到弹出的对话框和显示的文字。
▲
总结
其实Android 搭配Google Map还能实现很多功能,比如GPS导航,结合SNS实现提供各类的LBS位置服务等,本文只是带领你初窥了Android 搭配Google Map的强大功能,更多的还有待读者去实践发现。
本文来源:http://www.cnblogs.com/zzbbs/archive/2011/02/22/1961680.html
分享到:
相关推荐
安卓 android google map 谷歌地图
Android google map API例子
同时,你需要在权限下声明自己的`MAPS_RECEIVE`权限,并在`<application>`标签内声明你的应用使用Google Maps服务: ```xml <permission android:name="com.example.v2_test.permission.MAPS_RECEIVE" android:...
要使用Google Maps Android API,首先需要在Google Cloud Console中创建一个新的项目,并启用Google Maps Android API。接着,获取API密钥,将其添加到AndroidManifest.xml文件中的meta-data标签中,以便应用能够...
本篇将详细探讨如何在Android应用中使用GoogleMap进行定位。 首先,我们需要在项目中引入Google Play Services库,这是GoogleMap API的基础。在`build.gradle`模块文件中添加依赖: ```groovy dependencies { ...
Android Google map使用,Android Google map使用
本教程主要围绕"google-Map.zip"这个压缩包,探讨如何在Android应用中使用Google Maps API,实现一个Android客户端的Google Map实例。我们将会讨论以下几个关键知识点: 1. **Google Maps API Key**: 在使用...
首先,要在Android应用中展示Google Maps,你需要在Google Cloud Console上创建一个新的项目并启用Google Maps Platform服务。接着,生成一个特定于应用的API密钥,这是连接你的应用和Google Maps服务的关键。在生成...
在Android应用开发中,使用Google Maps API进行地图集成是一项常见的任务。本实例,"轨迹记录 android google map 应用",是针对Android开发初学者的一个实战项目,它展示了如何在Android设备上实现轨迹记录功能,...
这篇教程“Android GoogleMap教程和实例”旨在帮助初学者快速掌握如何在Android应用中使用Google Maps API,提供了一系列实用的示例代码,使得学习过程更加直观易懂。 1. **获取Google Map API Key** 获取API Key...
申请Android Google Map API key
**申请API Key**是使用Google Maps API的关键步骤。在Google Cloud Console中创建新项目,然后启用Google Maps Platform中的Maps SDK for Android服务。按照指引创建一个新的API密钥,限制其只用于你的Android应用,...
压缩包包含play-services-maps-16.1.0.aar/play-services-places-15.0.1.aar/play-services-location-15.0.1.aar/android-maps-utils-0.5.aar 等...
在Android应用开发中,结合Google Map提供路径查询和导航功能是一项常见的需求。本文将详细介绍如何在Android设备上实现这一功能,主要涉及Google Directions API的使用和解析返回的路线数据。 首先,Google ...
1. **获取API密钥**:在开始之前,你需要在Google Cloud Platform控制台创建一个项目,并为该项目启用Google Maps Android API。然后,生成一个API密钥,用于在应用中验证请求来源。 2. **添加依赖库**:在应用的`...
完成以上步骤后,你就可以在你的应用中使用Google Maps API了。在你的Activity中初始化`GoogleMap`对象,设置地图视图,添加标记、路径或者其他的地图元素。此外,你还可以实现缩放、平移、旋转等交互功能,以及添加...
对于初学者来说,掌握如何在Android应用中使用Google Maps API是至关重要的。本文将详细讲解Android Google Map的初步学习过程。 首先,你需要在Google Cloud Platform上创建一个项目,并启用Google Maps SDK for ...
实现通过GPS或NetWork获取当前位置的经纬度,并且在Google Map Android v2上显示