在Google Map(一) 中,我们学习了怎么样在手机中显示google地图,但是知道怎么显示地图是远远不够得,我们要利用它来做一些对我们有用的事情,今天我们要做的是:在google map上的某个经纬度显示一张图片,并且我们点击图片会弹出一个对话框,显示一些信息。
涉及到的知识点:
Maps API Key的获取,AlertDialog对话框的使用,Overlay抽象类,OverlayItem类,GeoPoint类。
先分别介绍下这几个类:
AlertDialog类:显示对话框
Overlay抽象类:图层,地图上显示的标记就是放在图层上,他有两个继承它的子类:ItemizedOverlay,MyLocationOverlay
OverlayItem类:地图上显示的标记
GeoPoint类:通过经纬度指定地图上的一个点
下面就来完成上面所提及的功能:
1、首先要在AndroidManifest.xml中添加the standard Android library,在AndroidManifest.xml的application节点中添加如下内容:
<uses-library android:name="com.google.android.maps" />
另外还要开通网络权限,在manifest的child节点中添加如下:
<uses-permission android:name="android.permission.INTERNET" />
AndroidManifest.xml完整代码如下:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="weiyong.googlemap1" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <uses-library android:name="com.google.android.maps" /> <activity android:name=".googlemap1" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-permission android:name="android.permission.INTERNET" /> </manifest>
2、打开res/layout/main.xml,在里面添加com.google.android.maps.MapView节点:
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.maps.MapView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:apiKey="0JF2BOEcpjLIf3HVmXn28EL-ahyk_mJbHBICUeg"
/><!-- 这个apiKey是我申请的,各不一样,你们要用使用自己的apiKey -->
配置文件到这里也就结束了,下面是要完成编码。
这里要说明一点:在google map上(MapView)放置标记(OverlayItem)的时候,我们必须放在中间层一个叫做图层(Overlay)的层上,所以在MapView之上创建一个图层,需要创建一个类,实现Overlay,并生成该类的对象,然后对该对象添加到MapView。【通过MapView.getOverlays()】
3、新建一个图层类:HelloItemizedOverlay,继承ItemizedOverlay(Overlay的子类):
public class HelloItemizedOverlay extends ItemizedOverlay<OverlayItem> {
HelloItemizedOverlay类的完整代码如下,附加详细的注释:
import java.util.*; 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; /** * 在MapView之上创建一个图层,需要创建一个类,实现Overlay,并生成该类的对象, * 然后对该对象添加到MapView。【MapView.getOverlays()】 * 一个OverlayItem对象代表了一个地图上显示的标记 */ public class HelloItemizedOverlay extends ItemizedOverlay<OverlayItem> { //创建一个list对象,用于持有该图层中所有的标记数 private List<OverlayItem> overlayItem = new ArrayList<OverlayItem>(); private Context context = null; //第一个参数用于指定标记所使用的默认图片 public HelloItemizedOverlay(Drawable defaultMarker, Context context) { //必须调用父类的构造方法 super(boundCenterBottom(defaultMarker)); this.context = context; } public HelloItemizedOverlay(Drawable defaultMarker) { super(boundCenterBottom(defaultMarker)); } //用于生成还得OverlayItem对象添加到list中 public void addOverlay(OverlayItem overlay) { overlayItem.add(overlay); populate();//一旦有新overlayItem数据进来,在调用其他方法之前必须先调用populate()方法 } // 创建一个OverlayItem索引 @Override protected OverlayItem createItem(int i) { return overlayItem.get(i); } // 返回当前的Overlay当中所包含的OverlayItem对象 @Override public int size() { return overlayItem.size(); } // 当用户点击标记的时候所调用的函数 @Override protected boolean onTap(int index) { OverlayItem item = overlayItem.get(index); AlertDialog.Builder dialog = new AlertDialog.Builder(context); dialog.setTitle(item.getTitle()); dialog.setMessage(item.getSnippet()); dialog.show(); return true; } }
4、Activity类googlemap1类不是和以往一样继承Activity类,而是继承MapActivity类。
具体代码如下: public class googlemap1 extends MapActivity {
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.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;
public class googlemap1 extends MapActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MapView mapView = (MapView) findViewById(R.id.mapview);
//设置mapView显示用于缩放的工具条
mapView.setBuiltInZoomControls(true);
//调用mapView对象的getOverlays()方法,用于得到所有的图层对象
List<Overlay> mapOverlays = mapView.getOverlays();
Drawable drawable = this.getResources().getDrawable(R.drawable.icon);//引用android自带的图片
HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable,this);
//创建一个GeoPoint对象,通过经纬度指定地图上的一个点
GeoPoint point = new GeoPoint(19240000,-99120000);
//创建一个OverLayItem对象
OverlayItem overlayitem = new OverlayItem(point, "Hola, Mundo!", "I'm in Mexico City!");
//将创建好的OverlayItem对象添加到HelloItemizedOverlay对象中
itemizedoverlay.addOverlay(overlayitem);
//将HelloItemizedOverlay对象添加到mapView
mapOverlays.add(itemizedoverlay);
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
}
发表评论
-
数据结构利器之私房STL
2012-12-11 10:29 0http://www.cnblogs.com/daoluanx ... -
Android xml资源文件中@、@android:type、@*、?、@+含义和区别
2011-12-28 08:48 1018一.@代表引用资源 1.引用自定义资源。格式:@[packa ... -
关于handler
2011-11-11 17:26 1140链接:Android的消息机制 ... -
常用activity跳转
2011-11-01 10:50 1578------------------------------- ... -
Activity的android:launchMode
2011-10-14 09:41 1059<activity android:launchMode ... -
android wifi
2011-10-10 10:26 1045wifi网卡的状态由一系列的整型常量来表示的: 1)、int ... -
android 蓝牙
2011-09-26 11:32 1141对于一般的软件开发人员来说,蓝牙是很少用到的,尤其是Andro ... -
HttpClient的使用
2011-09-13 11:11 1070HTTP 协议可能是现在 Internet 上使用得最多、最重 ... -
XML解析之-pull解析
2011-09-09 10:07 10710Pull是Android内置的xml解析器。Pull解析器的运 ... -
XML解析之-SAX解析
2011-09-08 18:04 1415在android开发中,我们经常使用SAX解析来解析xml数据 ... -
XML解析之-XStream解析
2011-09-08 17:07 11362本例使用XStream生成一个xml文件,再发序列化xml ... -
json数据解析一
2011-09-08 11:05 1574本例用JsonReader类来解析 ... -
json数据解析二
2011-09-08 10:47 1211这一篇我们将采用Gson类来解析json数据。把json解析出 ... -
Google Map(一)
2011-09-06 18:24 1029今天学习了google map的简单开发,此篇博文主要内容是: ...
相关推荐
VS2008制作的GoogleMap二次开发Demo源码, 在WinForm窗体中添加GoogleMap地图,可在地图中添加文本标注,可以编译通过正确运行。
Google Map API 接口调用。
基于ASP.NET开发,可以地图浏览,并且快速定位选择企业,浏览相关信息
Google Maps二次开发 Google Maps二次开发 Google Maps二次开发
Google mapGoogle mapGoogle mapGoogle mapGoogle mapGoogle mapGoogle map
googleMap__谷歌___地图_.ppt
google map 的应用实例,可以使用离线地图,很实用
该实例实现google map和ExtJs结合开发,实现图层管理、图层可见性控制、图层要素详细信息查看等功能。
安卓 android google map 谷歌地图
googleMap根据经纬度获取地理位置,里面有使用代码,只需填入经纬度即可获取地理位置信息
谷歌地图Google Map API中文开发文档 V3
google mapgoogle mapgoogle mapgoogle mapgoogle mapgoogle map
GoogleMap 开发源码
Google Map API 使用示例
google map api 参考文档google map api 参考文档google map api 参考文档google map api 参考文档google map api 参考文档google map api 参考文档
GoogleMap控件是一款开源控件。 下载
谷歌MAP_V3中文详解以及一个简单例子
下载googlemap,主要用于方便各位下载google地图
GOOGLE MAP api 7个案例。 CurrentAddress 得到当前位置 gMap 地形 路线 GoogleMapDemo 当前位置 MAP 绘制路线 MapView 放大缩小 WeatherMap 在MAP上添加图片 WorldCities 城市经纬度的切换 以及 动画切换效果
google map for android