今天將和大家分享的是如何構(gòu)建自定義圖層并顯示自定義的覆蓋物。
首先,我們要構(gòu)建一個最基本的地圖應用,具體介紹請參考: 百度地圖SDK for Android【Demo地圖展示】
在此基礎(chǔ)之上,我們對工程文件做一定的修改。
第一步,修改布局文件,添加button控件,用于控制添加自定義覆蓋物。代碼如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<!-- 放入百度地圖的mapview -->
<com.baidu.mapapi.map.MapView android:id="@+id/bmapsView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"/>
<!-- 添加按鈕 -->
<Button
android:id="@+id/button1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:text="《添加自定義覆蓋物》" />
</RelativeLayout>
第二步,定義繼承自ItemizedOverlay<OverlayItem>的自定義圖層。代碼如下:
public class MyOverLay extends ItemizedOverlay<OverlayItem> {
private List<OverlayItem> GeoList = new ArrayList<OverlayItem>();
private Context mContext;
private double mLat1 = 39.90923;//39.9022; // point1緯度
private double mLon1 = 116.397428;//116.3822; // point1經(jīng)度
private double mLat2 = 39.9022;
private double mLon2 = 116.3922;
private double mLat3 = 39.917723;
private double mLon3 = 116.3722;
public MyOverLay(Drawable marker, Context context){
super(marker);
this.mContext= context;
// 用給定的經(jīng)緯度構(gòu)造GeoPoint,單位是微度 (度 * 1E6)
GeoPoint p1 = new GeoPoint((int)(mLat1 * 1E6), (int)(mLon1 * 1E6));
GeoPoint p2 = new GeoPoint((int)(mLat2 * 1E6), (int)(mLon2 * 1E6));
GeoPoint p3 = new GeoPoint((int)(mLat3 * 1E6), (int)(mLon3 * 1E6));
GeoList.add(new OverlayItem(p1, "P1", "point1"));
GeoList.add(new OverlayItem(p2, "P2", "point2"));
GeoList.add(new OverlayItem(p3, "P3", "point3"));
populate();//createItem(int)方法構(gòu)造item。一旦有了數(shù)據(jù),在調(diào)用其它方法前,首先調(diào)用這個方法
}
@Override
protected OverlayItem createItem(int i){
return GeoList.get(i);
}
@Override
public int size(){
return GeoList.size();
}
@Override
// 處理當點擊事件
protected boolean onTap(int i){
Toast.makeText(this.mContext, GeoList.get(i).getSnippet(), Toast.LENGTH_SHORT).show();
return true;
}
}
第三步,在主類中定義并初始化button控件,設(shè)置相應的點擊事件。代碼如下:
// 初始化button并設(shè)置點擊操作事件
button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Drawable marker =getResources().getDrawable(R.drawable.ic_launcher);
mapView.getOverlays().add(new MyOverLay(marker, MainActivity.this));
mapView.refresh();
}
});
第四步,運行,顯示結(jié)果如下:
更多詳細信息請登錄百度地圖API官方網(wǎng)站:
http://developer.baidu.com/map/
百度地圖API論壇:
http://bbs.lbsyun.baidu.com/
更多文章、技術(shù)交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

