5.2 Android Basic QuickStart Widgets&Other View Google Map View
Google Map View
本演练演示Google Maps library, 你可以创建自己的google地图。
注意本演练需要使用扩展了Google Maps library的 Android SDK 。
Part1 Create a map Activity
- 新建项目 HelloGoogleMaps。
-
Maps library 不是标准的Android library. 必须在 Android Manifest 中声明。打开AndroidManifest.xml 为<application>节增加下面的配置节。
<uses-library android:name="com.google.android.maps"></uses-library>
3. 打开访问INTERNET的权限。为<manifest>增加如下配置节。
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
4. 去除标题栏。
<activity android:name=".HelloGoogleMaps" android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar">
5. 打开res/layout/main.xml 文件,修改代码如下:
<?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:clickable="true"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:apiKey = "07O1I2r3dwmbLfUAX3h8IxZJN9dfNDWgz-Op_YQ"
/>
申请google map api http://code.google.com/android/add-ons/google-apis/mapkey.html
C:\Users\Administrator>keytool -list -alias androiddebugkey -keystore D:\Users\A
dministrator\.android\debug.keystore -storepass android -keypass android
androiddebugkey, 2010-8-25, PrivateKeyEntry,
认证指纹 (MD5): 84:A7:3F:DA:2A:EA:70:33:F4:8A:FD:47:01:6E:5E:C7
6. 打开HelloGoogleMaps.java文件使用 MapActivity 代替基类Activity。
public class HelloGoogleMaps extends MapActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
7. 重写isRouteDisplayed()方法。
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
8. 在onCreate()增加如下代码
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MapView mapView = (MapView)findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
}
9. 运行程序
Part 2: Adding Overlay Items 添加地图标记
-
新建类HelloItemizedOverlay 继承 ItemizedOverlay。
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.OverlayItem;
public class HelloItemizedOverlay extends ItemizedOverlay {
2. 添加成员变量一个OverlayItemArrayList, 保存所有的标记。
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
3. 定义构造函数
public HelloItemizedOverlay(Drawable defaultMarker) {
super(boundCenterBottom(defaultMarker));
// TODO Auto-generated constructor stub
}
4. 增加标记
public void addOverlay(OverlayItem overlay){
mOverlays.add(overlay);
populate();
}
每一次增加一个新的OverlayItem到数组,你必须为ItemizedOverlay调用populate。
5. 重写 createItem 方法, 从ArrayList返回标记。
@Override
protected OverlayItem createItem(int i) {
// TODO Auto-generated method stub
return mOverlays.get(i);
}
6. 必须重写size()方法。返回标记个数。
@Override
public int size() {
// TODO Auto-generated method stub
return mOverlays.size();
}
7. 添加Context成员变量Context mContext,新建构造函数
public HelloItemizedOverlay(Drawable defaultMarker,Context context) {
super(defaultMarker);
mContext = context;
}
重写onTap(int) 方法,当用户触发标记时。
@Override
protected boolean onTap(int index) {
OverlayItem item = mOverlays.get(index);
AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
dialog.setTitle(item.getTitle());
dialog.setMessage(item.getSnippet());
dialog.show();
return true;
}
返回 HelloGoogleMaps类。在下面的过程中,你将为HelloitemizedOverlay类创建一个OverlayItem的实例使用GeoPoint增加HelloItemizedOverlay到MapView的地图点上。
- 首先将标记使用的图片放到res/drawable目录
-
编辑onCreate()方法。
List<Overlay> mapOverlays = mapView.getOverlays();
Drawable drawable = this.getResources().getDrawable(R.drawable.androidmarker);
HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable);
3. 定义坐标点GeoPoint
GeoPoint point = new GeoPoint(19240000,-99120000);
OverlayItem overlayitem = new OverlayItem(point,"Hola,Mundo!","I'm in Mexico City!");
4. 增加OverlayItem 到HelloItemizedOverlay实例。在为MapView添加HelloItemizedOverlay。
itemizedoverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedoverlay);
5. 运行程序。
在增加一个标记
GeoPoint point2 = new GeoPoint(35410000, 139460000);
OverlayItem o = new OverlayItem(point2, "Sekai, konichiwa!", "I'm in Japan!");
itemizedoverlay.addOverlay(o);
author: im@xingquan.org