package com.example.mapitemizedoverlay;
import ...
public class MainActivity extends MapActivity {
MapView map;
//因為內部類別會用到,只好把目標地理變數變成全域變數
GeoPoint ntuGeo;
//宣告內部類別變數,此類別繼承ItemizedOverlay,因此代表一個Overlay(圖層)
HelloItemizedLayer mylayer;
//宣告一個List容器,用來裝MapView上的Overlay
List<Overlay> mapoverlay;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
map=(MapView)findViewById(R.id.mapview);
MapController con=map.getController();
con.setZoom(18);
map.setBuiltInZoomControls(true);
double x=25.019943,y=121.542353;
ntuGeo=new GeoPoint((int)(x*1e6), (int)(y*1e6));
con.animateTo(ntuGeo);
//Access the overlay list. 取得MapView上維護那些Overlay的列表
mapoverlay=map.getOverlays();
//建立Drawable物件,取得其圖檔資源
Drawable draNtu=this.getResources().getDrawable(R.drawable.ic_launcher);
//設定邊界
draNtu.setBounds(0, 0, draNtu.getMinimumWidth(), draNtu.getMinimumHeight());
//建立內部類別變數物件,建構參數為一個Drawable物件,而預設的建構子方法變會將圖形給繪製出。如底下匿名類別中。類別建構子所示
mylayer=new HelloItemizedLayer(draNtu);
//將自訂的類別也就是Overlay(圖層)給加進裝Overlay的List中
mapoverlay.add(mylayer);
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
//內部類別,繼承 ItemizedOverlay
private class HelloItemizedLayer extends ItemizedOverlay<OverlayItem>{
//建構一個裝OverlayItem(圖標)的列表,負責儲存多個圖標,雖然本例只用一個
List<OverlayItem> items=new ArrayList<OverlayItem>();
//建構子,負責將由主程式傳來的圖標設定給繪製出來
public HelloItemizedLayer(Drawable arg0) {
super(arg0);
// TODO Auto-generated constructor stub
//加進一個OverlayItem物件,伴隨著(地點座標物件,標題字串,說明字串)
items.add(new OverlayItem(ntuGeo, "台大(標題)", "台灣大學"));
//此方法負責ItemizedOverlay建構背後所需動作,一定要加!!
populate();
}
@Override
//由populate()呼叫,他會決定哪些圖標會出現在地圖上,並且該圖標物件從items中取
出
//參數index代表取出物件之索引
protected OverlayItem createItem(int index) {
// TODO Auto-generated method stub
return items.get(index);
}
@Override
//一樣由populate()呼叫,決定要取出幾個圖標物件
public int size() {
// TODO Auto-generated method stub
return items.size();
}
@Override
//使用者點選圖標的反應,在這邊是Show出一個對話欄
protected boolean onTap(int index) {
// TODO Auto-generated method stub
new AlertDialog.Builder( MainActivity.this)
//取得圖標物件的Title
.setTitle(items.get(index).getTitle())
//取得圖標物件的內容說明
.setMessage(items.get(index).getSnippet())
.show();
return true;
}
}
}
沒有留言:
張貼留言