地图提示气泡
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本文由AlephSoul贡献
doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。
Android 中点中 overlay 弹出带尾巴的气泡的实现 尾巴的气泡的实现
1.在 res/layout 目录下建立 pop view 的 xml 文件:overlay_pop.xml
Java 代码 1. 2.
12.
另外,作为背景的 bubble_background 图片是采用采用 9.png 的格式:
在 onCreate 中: MapView 是继承自 ViewGroup 的,因此,MapView 有 addView()方法,同时还有 youtParams youtParams 可以根据 GeoPoint 来定位,我就是利用这个特性来定位弹出的 popView 的.
Java 代码 1. View popView = View.inflate(this, yout.overlay_pop, null); 2. mapView.addView(popView, new youtParams(youtParams.W RAP_CONTENT, 3. youtParams.WRAP_CONTENT, null, youtParams.BO TTOM_CENTER)); 4. popView.setVisibility(View.GONE);
2.实现点击某个 Overlay 弹出 popView。 overlay 有 onTap()方法,你可以实现自己的 overlay onTap()方法,弹出 popView, 也可以使用 setOnFocusChangeListener(),在 listener 中实现弹出 popView,. 我是用的 listener,因为 setOnFocusChangeListener 在失去焦点也会触发,我可以再失去焦点的时候隐藏 popView.
Java 代码 1. /** 2. 3. * 气泡窗口监听器 */
4.
private final ItemizedOverlay.OnFocusChangeListener onFocusChangeLis tener = new ItemizedOverlay.OnFocusChangeListener() {
5. 6.
@Override public void onFocusChanged(ItemizedOverlay overlay, OverlayIte m newFocus) {
7. 8. 9. 10. 11. 12.
// 创建气泡窗口 if (popView != null) { popView.setVisibility(View.GONE); } if (newFocus != null) { youtParams geoLP = (youtParams) popV iew.getLayoutParams();
13. 位 14. p_bubbleTitle); 15. 16. _bubbleText); 17.
geoLP.point = newFocus.getPoint();// 这行用于 popView 的定
TextView title = (TextView) popView.findViewById(R.id.ma
title.setText(newFocus.getTitle()); TextView desc = (TextView) popView.findViewById(R.id.map
if (newFocus.getSnippet() == null || newFocus.getSnippet ().length() == 0) {
18. 19. 20.
21. 22. 23. 24. 25. 26. 27. }; } } }
desc.setVisibility(View.GONE); } else { desc.setVisibility(View.VISIBLE); desc.setText(newFocus.getSnippet());
mapView.updateViewLayout(popView, geoLP); popView.setVisibility(View.VISIBLE);
3.自己实现一个继承自 ItemizedOverlay 的 Overlay, Overlay 中有一个
Java 代码
1. private static final int LAYER_FLAGS = Canvas.MATRIX_SAVE_FLAG | Canvas. CLIP_SAVE_FLAG 2. | Canvas.HAS_ALPHA_LAYER_SAVE_FLAG | Canvas.FULL_COLOR_LAYER _SAVE_FLAG | Canvas.CLIP_TO_LAYER_SAVE_FLAG; Java 代码 1. private final ArrayList
和用于向 overlayItems 中添加 OverlayItem 的方法
Java 代码 1. public void addOverlay(OverlayItem overlay) { 2. 3. 4. } 在 override 的 draw 方法中 Java 代码 1. @Override 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Drawable marker = overLayItem.getMarker(0); // marker.getBounds() /* 象素点取得转换 */ for (int i = 0; i < size; i++) { overLayItem = overlayItems.get(i); Projection projection = mapView.getProjection(); int size = overlayItems.size(); Point point = new Point(); Paint paint = new Paint(); paint.setAntiAlias(true); OverlayItem overLayItem; public void draw(Canvas canvas, MapView mapView, boolean shadow) { if (!shadow) { canvas.save(LAYER_FLAGS); overlayItems.add(overlay); populate();
19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. } } }
projection.toPixels(overLayItem.getPoint(), point);
if (marker != null) { boundCenterBottom(marker); }
/* 圆圈 */ paint.setColor(Color.RED); canvas.drawCircle(point.x, point.y, 5, paint);
/* 标题 */ String title = overLayItem.getTitle();
if (title != null && title.length() > 0) { paint.setColor(Color.BLACK); paint.setTextSize(15); canvas.drawText(title, point.x, point.y, paint); }
canvas.restore();
super.draw(canvas, mapView, shadow);
在 onCreate 中初始化
Java 代码 1. overlay.addOverlay(new OverlayItem(pointQSH, "清水河", "清水河校区")); 2. overlay.addOverlay(new OverlayItem(pointSH, "沙河", "沙河校区")); 3. overlay.setOnFocusChangeListener(onFocusChangeListener); 4. mapView.getOverlays().add(overlay); OK,实现效果:
1