先上效果圖
9CF11F122C8A10F33D826EFBC94FED1F.png
點(diǎn)擊小狗的Marker:
E7D60361569EA846EA60CB55A8AE1EF0.png
點(diǎn)擊小貓的Marker:
42AC4E1CD63A77D72F76782F7DC4B2E3.png
首先,自定義Marker(實(shí)現(xiàn)圖一):
//必須創(chuàng)建兩個(gè)不同的 MarkerOptions 以及 Marker 用于區(qū)分身份類(lèi)型
private MarkerOptions markerOptionsDog;
private MarkerOptions markerOptionsCat;
private Marker mMarkerDog;
private Marker mMarkerCat;
//MarkerOptions 要在地圖初始化時(shí)new出來(lái)
private void initView() {
if (aMap == null) {
aMap = mMapView.getMap();
markerOptionsCat = new MarkerOptions();
markerOptionsDog = new MarkerOptions();
}
aMap.setOnMarkerClickListener(this);
}
//根據(jù)數(shù)據(jù) 判斷是哪一種身份
switch (list.get(i).getType()) {
case 1:
//小狗
View viewDog = LayoutInflater.from(this).inflate(R.layout.marker_window_dog, null);
TextView textViewDog = (TextView) viewDog.findViewById(R.id.text_marker_window_dog);
textViewDog.setText(list.get(i).getDog());
/**
* 經(jīng)度和緯度
*/
LatLng mLatlngDog = new LatLng(list.get(i).getLon(), list.get(i).getLat());
//將年齡和性別拼接起來(lái) 點(diǎn)擊Marker后的窗口取出
String groupDog = list.get(i).getAge() + "#" + list.get(i).getGender();
markerOptionsDog.position(mLatlngDog)
.title(list.get(i).getDog())
.snippet(groupDog)
.draggable(false)
.icon(BitmapDescriptorFactory.fromView(viewDog));
//將數(shù)據(jù)添加到地圖上
mMarkerDog = aMap.addMarker(markerOptionsDog);
//設(shè)置類(lèi)型為1 為了區(qū)分 點(diǎn)擊 哪一個(gè)類(lèi)型的Marker
mMarkerDog.setObject(1);
break;
case 2:
//小貓
View viewCat = LayoutInflater.from(this).inflate(R.layout.marker_window_cat, null);
TextView textViewCat = (TextView) viewCat.findViewById(R.id.text_marker_window_cat);
textViewCat.setText(list.get(i).getCat());
/**
* 經(jīng)度和緯度
*/
LatLng mLatlngCat = new LatLng(list.get(i).getLon(), list.get(i).getLat());
//將年齡和性別拼接起來(lái)
String groupCat = list.get(i).getAge() + "#" + list.get(i).getGender();
markerOptionsCat.position(mLatlngCat)
.title(list.get(i).getCat())
.snippet(groupCat)
.draggable(false)
.icon(BitmapDescriptorFactory.fromView(viewCat));
//將數(shù)據(jù)添加到地圖上
mMarkerCat = aMap.addMarker(markerOptionsCat);
//設(shè)置類(lèi)型為2 為了區(qū)分 點(diǎn)擊 哪一個(gè)類(lèi)型的Marker
mMarkerCat.setObject(2);
break;
default:
break;
}
實(shí)現(xiàn)圖二、圖三的自定義Window窗口:
//首先類(lèi)要實(shí)現(xiàn) OnMarkerClickListener 接口
public class CustomMarkerWindowActivity extends Activity implements AMap.OnMarkerClickListener
/**
* 對(duì)marker標(biāo)注點(diǎn) 點(diǎn)擊響應(yīng)事件
*
* @param marker
* @return
*/
@Override
public boolean onMarkerClick(Marker marker) {
if (aMap != null & marker.getTitle() != null) {
// 點(diǎn)擊地圖Marker 打開(kāi)Window
WindowDialog.getInstance().showDialog(marker, CustomMarkerWindowActivity.this);
}
return true;
}
//WindowDialog.getInstance().showDialog() 為一個(gè)自定義的Dialog
//將marker傳入WindowDialog 類(lèi)中
public void showDialog(Marker marker, Context mContext) {
//判斷身份類(lèi)型
switch (marker.getObject().toString()) {
case "1":
setDog(marker, mContext);
break;
case "2":
setCat(marker, mContext);
break;
default:
break;
}
}
//根據(jù)不同的身份展示不同的布局
/**
* 設(shè)置小狗的布局
* @param marker
* @param mContext
*/
private void setDog(Marker marker, Context mContext) {
View view = LayoutInflater.from(mContext).inflate(R.layout.dialog_amap_marker_window_dog, null, false);
setAlertDialog(view);
TextView nameDog,ageDog,genderDog;
nameDog = (TextView) view.findViewById(R.id.text_name_marker_window_dog);
ageDog = (TextView) view.findViewById(R.id.text_age_marker_window_dog);
genderDog = (TextView) view.findViewById(R.id.text_gender_marker_window_dog);
//截取字段
String age = marker.getSnippet().substring(0, marker.getSnippet().indexOf("#"));
String gender = marker.getSnippet().replaceAll(age + "#", "");
nameDog.setText("名字:"+marker.getTitle());
ageDog.setText("年齡:"+age+"歲");
genderDog.setText("性別:"+gender+"的");
}
/**
* 設(shè)置小貓的布局
* @param marker
* @param mContext
*/
private void setCat(Marker marker, Context mContext) {
View view = LayoutInflater.from(mContext).inflate(R.layout.dialog_amap_marker_window_cat, null, false);
setAlertDialog(view);
TextView nameCat,ageCat,genderCat;
nameCat = (TextView) view.findViewById(R.id.text_name_marker_window_cat);
ageCat = (TextView) view.findViewById(R.id.text_age_marker_window_cat);
genderCat = (TextView) view.findViewById(R.id.text_gender_marker_window_cat);
//截取字段
String age = marker.getSnippet().substring(0, marker.getSnippet().indexOf("#"));
String gender = marker.getSnippet().replaceAll(age + "#", "");
nameCat.setText("名字:"+marker.getTitle());
ageCat.setText("年齡:"+age+"歲");
genderCat.setText("性別:"+gender+"的");
}
由此全部實(shí)現(xiàn)Marker以及Window的自定義
Github:
https://github.com/RookieExaminer/AMap2DDemo
CustomMarkerWindowActivity.class 類(lèi)