读书人

Android google 地图自定义图层

发布时间: 2012-09-10 11:02:32 作者: rapoo

Android google map自定义图层

????? 在以前的电子商务项目中,需要在google地图中比较符合用户条件的酒店的位置以及添加相关的说明图层,只是调用google的js实现即可,现在在android开发中可以使用google 的android api实现。

?

?

Android google 地图自定义图层

?

?

package com.easyway.android.ui;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;/** * 实现Google 地图中带自定义的图层的方法 * 1. * @author longgangbai * */public class CustomItemizedOverlayActivity extends MapActivity {    private MapView mapView;    private   MapController mapController ;        /**     *      */    @Override    public void onCreate(Bundle savedInstanceState) {                super.onCreate(savedInstanceState);        //设置布局        setContentView(R.layout.main);        //获取google地图对象        mapView = (MapView) findViewById(R.id.mapView);        //设置可以缩放的功能        mapView.setBuiltInZoomControls(true);        //获取所有的图层        List<Overlay> mapOverlays = mapView.getOverlays();        //获取图片        Drawable drawable = this.getResources().getDrawable(R.drawable.gps);        //获取图表        CustomItemizedOverlay itemizedOverlay =              new CustomItemizedOverlay(drawable, this);       //北京的中心是北纬39度54分26.37秒,东经116度23分29.22秒。国旗基座的位置是北纬39度54分19.97秒,东经116度23分29.34秒。人民英雄纪念碑的位置是北纬39度54分11.40秒,东经116度23分29.88秒        //设置经纬度        GeoPoint point= new GeoPoint(39971036, 116314659);        //创建图层项        OverlayItem overlayitem =              new OverlayItem(point, "Hello", "Welcome to beijing's TianAnMen !");                //添加一个图层项        itemizedOverlay.addOverlay(overlayitem);                mapOverlays.add(itemizedOverlay);        //添加图层项目        mapController = mapView.getController();        //定位到所要的经纬度        mapController.animateTo(point);        //以此经纬度为中心        mapController.setCenter(point);        mapController.setZoom(6);    }          @Override    protected boolean isRouteDisplayed() {        return true;    }    }

?

?

package com.easyway.android.ui;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;/** *  * 自定义地图的图层 * 我们需要为地图多增加一些自定义的功能,比如可以在地图上进行一些标注。 * 为了实现这样的功能,我们可以继承Overlay这个类,这个类是一个基类,提供了 * 可以在地图上添加图层的基本功能。而另外的选择是,我们可以继承itemzedOverlay这个类, * 需要在构造函数中使用Drawable类,这将被用作来绘制一个标记。 * 此外,我们使用ArrayList * 去保存所有的Overlayitems,而createitem和size方法则容易理解了, * 分别是返回每一个 * Overlayitem和返回目前的所有标记的数目。而onTap方法则是在当某个标记在地图上真正标注时 * 所触发的,比如当在触摸屏上点击时,也可以触发该事件。 *  * 在这个例子中,我们只是通过弹出对 * 话框的方法展示给用户看。最后,在addOverlay方法中,我们向标记数组mapOverlays中增加 * 一个overlayitem标记,并且调用populate方法将其展示出来。 *  * @author longgangbai * */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;   }      /**    * 添加图层的方法    * @param overlay    */   public void addOverlay(OverlayItem overlay) {      mapOverlays.add(overlay);      this.populate();   }}

?

?

?

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.easyway.android.ui"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk android:minSdkVersion="10" />    <!-- 添加访问权限 -->    <uses-permission android:name="android.permission.INTERNET"/>    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>      <application        android:icon="@drawable/ic_launcher"        android:label="@string/app_name" >        <!-- 添加google map 的类库 -->        <uses-library android:name="com.google.android.maps" />                          <activity            android:label="@string/app_name"            android:name=".CustomItemizedOverlayActivity" >            <intent-filter >                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application></manifest>

?

?

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" > <com.google.android.maps.MapView    android:id="@+id/mapView"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:enabled="true"    android:clickable="true"    android:apiKey="0S3Q4ZaVtVDhibBF6eIGl30D9JDmXVdvP4sQvnQ"    />  </LinearLayout>

?

读书人网 >Android

热点推荐