Android Google Map執行個體 – 添加Google Map自訂圖層(Android mapview)

來源:互聯網
上載者:User
上篇:Android Google Map應用執行個體 - 建立一個Google Map常式(Android mapview)

通常情況光有地圖還是不夠的,如何添加一個自訂的圖層,譬如說把一個熱點,一個基站地址標註在地圖上。如下步驟幫你完成Android Google Map
自訂圖層的添加

 

建立一個 ItemizedOverlay 類

  1. 建立一個 Java 類
    HelloItemizedOverlay
    在建立列表框中的 Superclass, 填入"com.google.android.maps.ItemizedOverlay". 選擇選項
    Constructors from superclass.
  2. 需要 OverlayItem
    ArrayList, 通過這個ArrayList將所需要的地標OverlayItem
    標到地圖上. 在 HelloItemizedOverlay 類中添加:
    private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
  3. 定義建構函式

    public HelloItemizedOverlay(Drawable defaultMarker) {
      super(boundCenterBottom(defaultMarker));
    }
  4. 為了將 OverlayItems 加到 ArrayList, 需要addOverlay方法:

    public void addOverlay(OverlayItem overlay) {
        mOverlays.add(overlay);
        populate();
    }
    每添加一個OverlayItem 到ArrayList,需要調用 populate(),用來讀取所有的OverlayItems 並準備畫到圖層上。
  5. populate()方法執行完成後會調用createItem(int),重寫這個函數擷取ArrayList 中OverlayItem 的指示。

    @Override
    protected OverlayItem createItem(int i) {
      return mOverlays.get(i);
    }
  6. 重寫size函數:

    @Override
    public int size() {
      return mOverlays.size();
    }
  7. 下面來設定響應螢幕觸摸的函數,新增成員變數
    private Context mContext;

添加一個新的建構函式:

public HelloItemizedOverlay(Drawable defaultMarker, Context context) {
  this(defaultMarker);
  this.mContext = context;
}
重寫 onTap(int) 函數, 用來響應的使用者的觸摸:
@Override
protected boolean onTap(int index) {
  OverlayItem item =mOverlays.get(index);
  AlertDialog.Builder dialog = newAlertDialog.Builder(mContext);
  dialog.setTitle(item.getTitle());
  dialog.setMessage(item.getSnippet());
  dialog.show();
  return true;
}

HelloItemizedOverlay類完成了.

開啟HelloGoogleMaps 類.下面將建立 OverlayItem 並加到HelloItemizedOverlay 執行個體中, 並將HelloItemizedOverlay圖層加到MapView.

 

  1. 首先需要一個表徵圖的圖片,將檔案拖到
    res/drawable/ 檔案夾下即可.
  2. 在 onCreate() 方法的後面, 加上:

    List<Overlay> mapOverlays = mapView.getOverlays();
    Drawable drawable = this.getResources().getDrawable(R.drawable.XXXX); 
    //XXXX為表徵圖圖片的檔案名稱

HelloItemizedOverlay itemizedoverlay = newHelloItemizedOverlay(drawable,this);

  1. 建立GeoPoint , 並存入OverlayItem:

    GeoPoint point = new GeoPoint(29578181,121512974);
    OverlayItem overlayitem = new OverlayItem(point, "Hello!", "I'm in Chunhu!");
  2. 將 OverlayItem 添加入 HelloItemizedOverlay 執行個體,:

    itemizedoverlay.addOverlay(overlayitem);
    mapOverlays.add(itemizedoverlay);
  3. 添加新標註:

GeoPointpoint3 = new GeoPoint(29578290,121613174);

OverlayItem overlayitem3 = newOverlayItem(point3, "Hello3!","I'm in Chunhu3!");

itemizedoverlay.addOverlay(overlayitem3);

  1. 在onCreate()方法後添加:

mymapController.setZoom(9);      //設定地圖放大層級

  1. 運行程式得到如下左圖結果:

 

  1. 點擊表徵圖顯示如上右圖

 

詳細代碼:

HelloGoogleMaps.java檔案:

package com.google.maps.HelloGoogleMaps;<br />import java.util.List;<br />import android.app.Activity;<br />import android.graphics.drawable.Drawable;<br />import android.os.Bundle;<br />import com.google.android.maps.*;<br />public class HelloGoogleMaps extends MapActivity {<br /> /** Called when the activity is first created. */<br /> @Override<br /> public void onCreate(Bundle savedInstanceState) {<br /> super.onCreate(savedInstanceState);<br /> setContentView(R.layout.main);</p><p> MapView mapView = (MapView)findViewById(R.id.mapview);<br /> mapView.setBuiltInZoomControls(true);<br /> mapView.setEnabled(true);</p><p> MapController mymapController = mapView.getController();<br /> Double lng = 121.512974 * 1E6;<br /> Double lat = 29.578181 * 1E6;<br /> GeoPoint point = new GeoPoint( lat.intValue(),lng.intValue());<br /> mymapController.setCenter(point);//顯示中心<br /> mymapController.setZoom(9); //放大層級<br /> // mapView.setSatellite(true); //是否為衛星模式<br /> List<Overlay> mapOverlays = mapView.getOverlays();<br /> Drawable drawable = this.getResources().getDrawable(R.drawable.w9mt3knd);<br /> HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable,this);</p><p> GeoPoint point2 = new GeoPoint(29578181,121512974);<br /> OverlayItem overlayitem2 = new OverlayItem(point2, "Hello!", "I'm in Chunhu!");</p><p> GeoPoint point3 = new GeoPoint(29578290,121613174);<br /> OverlayItem overlayitem3 = new OverlayItem(point3, "Hello2!", "I'm in Chunhu2!");</p><p> itemizedoverlay.addOverlay(overlayitem2);<br /> itemizedoverlay.addOverlay(overlayitem3);<br /> mapOverlays.add(itemizedoverlay);<br /> }</p><p> @Override<br /> protected boolean isRouteDisplayed() {<br /> return false;<br /> }</p><p>}

H
e lloItemizedOverlay.java檔案

package com.google.maps.HelloGoogleMaps;<br />import java.util.ArrayList;<br />import android.app.AlertDialog;<br />import android.content.Context;<br />import android.graphics.drawable.Drawable;<br />import com.google.android.maps.ItemizedOverlay;<br />import com.google.android.maps.OverlayItem;<br />public class HelloItemizedOverlay extends ItemizedOverlay {<br /> private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();<br /> private Context mContext;</p><p> public HelloItemizedOverlay(Drawable defaultMarker) {<br /> //super(defaultMarker);<br /> super(boundCenterBottom(defaultMarker));<br /> // TODO Auto-generated constructor stub<br /> }<br /> public void addOverlay(OverlayItem overlay) {<br /> mOverlays.add(overlay);<br /> populate();<br /> }</p><p> @Override<br /> protected OverlayItem createItem(int i) {<br /> // TODO Auto-generated method stub<br /> return mOverlays.get(i);<br /> }<br /> @Override<br /> public int size() {<br /> // TODO Auto-generated method stub<br /> return mOverlays.size();<br /> }<br /> public HelloItemizedOverlay(Drawable defaultMarker, Context context) {<br /> //super(defaultMarker);<br /> this(defaultMarker);<br /> //mContext = context;<br /> this.mContext = context;<br /> }</p><p> @Override<br /> protected boolean onTap(int index) {<br /> OverlayItem item = mOverlays.get(index);<br /> AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);<br /> dialog.setTitle(item.getTitle());<br /> dialog.setMessage(item.getSnippet());<br /> dialog.show();<br /> return true;<br /> }<br />}

下篇:
Android Google Map應用執行個體 - 安裝到手機後的效果(Android mapview)            Android Google Map應用執行個體 - 在地圖和衛星圖之間切換(Android mapview)
           Android Google Map應用執行個體 - 添加GPS位置標註(Android mapview)

轉載本站文章請註明,轉載自:ADASiteMap的空間[http://www.adasitemap.tk]

本文連結:Android
Google Map執行個體 – 添加Google Map自訂圖層(Android mapview) | ADASiteMap的空間

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.