【Lesson 11】 高德地图中使用marker 和 InfoWindow 以及相关的事件。
访问量: 7474
refer to: http://lbs.amap.com/api/android-sdk/guide/overlay/
我们使用高德地图的场景之一,就是在地图上标注一些点(POI), 这些点显示出基本POI的信息
点击之后,会响应一些事件。
Marker
在基础的demo基础上:
Activity.java:
import com.amap.api.maps.model.BitmapDescriptorFactory;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.Marker;
import com.amap.api.maps.model.MarkerOptions;
// .. .其他代码
if(aMap == null) {
aMap = mapView.getMap();
setup_map(); // 这行代码是新增的
}
private void setup_map() {
addMarkersToMap();
}
private void addMarkersToMap(){
marker = aMap.addMarker(
new MarkerOptions()
.title("学习android map")
.snippet("路啦啦啦啦啦")
.icon(
BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)
).draggable(false)
);
marker.setPosition(new LatLng(39.99, 116.47));
}
// 下面四个呆呆的方法一定要带着
@Override
protected void onResume(){
super.onResume();
mapView.onResume();
}
@Override
protected void onPause(){
super.onPause();
mapView.onPause();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
几个点:
1. onPause, onResume 等函数一定要有
2.
marker.setRotateAngle(90);
// marker.setPositionByPixels(600, 400);
marker.setPosition(new LatLng(39.99, 116.47));
Marker 是由几部分总成: 1. 小图钉图标。 2. 标题。 3. infoWindow ,
setRotateAngle会让小图钉做旋转的。 如果不设置的话,它会被隐藏在 InfoWindow后面。
3. setPositionByPixels 是让小图钉固定在屏幕的相对位置, 不会随着地图的移动而移动。 如果希望做成正统的地图上的图钉,
就要用 setPosition 方法。
点击 Marker (标记) 的事件
1. 要让activity 实现一个 Listener:+public class DisplayMessageActivity extends AppCompatActivity
+ implements OnMarkerClickListener
2. 实现这个方法:
+ @Override
+ public boolean onMarkerClick(final Marker marker){
+ TextView text_view = (TextView)findViewById(R.id.message_content);
+ text_view.setText("你点击了我" + marker.getTitle());
+ marker.showInfoWindow();
+ return false;
+ }
3. 记得把方法给绑定到marker上:
aMap.setOnMarkerClickListener(this)
显示信息窗体 InfoWindow
显示的方法:marker.showInfoWindow();
下面,是自定义窗口。 命名不重要,里面对元素的操作,就是最简单的 get/set 各种属性。
/**
* 自定义infowinfow窗口
*/
public void render(Marker marker, View view) {
if (radioOption.getCheckedRadioButtonId() == R.id.custom_info_contents) {
((ImageView) view.findViewById(R.id.badge))
.setImageResource(R.drawable.badge_sa);
} else if (radioOption.getCheckedRadioButtonId() == R.id.custom_info_window) {
ImageView imageView = (ImageView) view.findViewById(R.id.badge);
imageView.setImageResource(R.drawable.badge_wa);
}
String title = marker.getTitle();
TextView titleUi = ((TextView) view.findViewById(R.id.title));
if (title != null) {
SpannableString titleText = new SpannableString(title);
titleText.setSpan(new ForegroundColorSpan(Color.RED), 0,
titleText.length(), 0);
titleUi.setTextSize(15);
titleUi.setText(titleText);
} else {
titleUi.setText("");
}
String snippet = marker.getSnippet();
TextView snippetUi = ((TextView) view.findViewById(R.id.snippet));
if (snippet != null) {
SpannableString snippetText = new SpannableString(snippet);
snippetText.setSpan(new ForegroundColorSpan(Color.GREEN), 0,
snippetText.length(), 0);
snippetUi.setTextSize(20);
snippetUi.setText(snippetText);
} else {
snippetUi.setText("");
}
}
注意:
1. 高德地图的marker, 点击之后,会自动弹出 info window, 光 hideInfoWindow不行。
2. 要有title, 否则info window 弹不出来
3. 参考: http://www.th7.cn/Program/java/201512/723072.shtml
4. 所以,要隐藏高德地图中的marker中的 info window, 不能实现: 点击marker, 显示,再点击,隐藏这样的操作。 只能实现:点击地图其他地方,或者infowindow, 隐藏 infowindow. 参考:http://bbs.csdn.net/topics/390440550?page=1