【Lesson 11】 高德地图中使用marker 和 InfoWindow 以及相关的事件。
访问量: 7048
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