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

       

       

posted @ 2011-03-25 16:30  敏捷学院  阅读(327)  评论(0编辑  收藏  举报