ItemizedOverlay的在mapview上弹出气泡

本文介绍如何使用自定义的RestaurantOverlay类来在地图上添加图标,并通过ItemizedOverlay的OnFocusChangeListener实现在点击图标时弹出包含详细信息的泡泡窗口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先定义一个overlay extends ItemizedOverlay,例如:

 class RestaurantOverlay extends ItemizedOverlay<OverlayItem> {
        private List<OverlayItem> items = new ArrayList<OverlayItem>();
        private Drawable marker = null;

        public RestaurantOverlay(Drawable defaultMarker) {
            super(defaultMarker);
            this.marker = defaultMarker;
        }
//添加OverlayItem对象
        public void addOverlay(OverlayItem overlay) {
            items.add(overlay);
            populate();
        }

        protected boolean isRouteDisplayed() {
            return false;
        }

        @Override
        protected OverlayItem createItem(int i) {
            return items.get(i);
        }

        @Override
        public int size() {
            return items.size();
        }

        @Override
        public void draw(Canvas canvas, MapView mapView, boolean shadow) {
            super.draw(canvas, mapView, shadow);
            boundCenterBottom(marker);
        }
    }

 

其次,获取要加载overlay的mapview句柄,调用mapview.getOverlays()方法,返回一个List<OverLay>对象。

然后,定义自己的overlay,如:RestaurantOverlay me = new RestaurantOverlay(Drawable对象);通过List<Overlay>对象的add(),把自己的Overlay添加上去。但还要为me添加OverlayItem对象,既可以显示图标在地图上。

最后,就是怎么点击标记图标,显示详细信息的泡泡呢?可以通过ItemizedOverlay内部类OnFocusChangeListener的onFocusChanged方法实现。如:

private final ItemizedOverlay.OnFocusChangeListener onFocusChangeListener = new ItemizedOverlay.OnFocusChangeListener() {

        public void onFocusChanged(ItemizedOverlay overlay, OverlayItem newFocus) {
            if (popView != null) {
                popView.setVisibility(View.GONE);
            }

            if (newFocus != null) {

                MapView.LayoutParams geoLP = (MapView.LayoutParams) popView
                        .getLayoutParams();
                geoLP.point = newFocus.getPoint();// 这行用于popView的定位
                TextView title = (TextView) popView
                        .findViewById(R.id.map_bubbleTitle);
                title.setText(newFocus.getTitle());

                TextView desc = (TextView) popView
                        .findViewById(R.id.map_bubbleText);
                if (newFocus.getSnippet() == null
                        || newFocus.getSnippet().length() == 0) {
                    desc.setVisibility(View.GONE);
                } else {
                    desc.setVisibility(View.VISIBLE);
                    desc.setText("距离当前位置:"+newFocus.getSnippet()+"公里");
                }
                citymap.updateViewLayout(popView, geoLP);
                popView.setVisibility(View.VISIBLE);
            }

        }
    };
基本上完成了,第一次写东西,有点没有层次。继续努力!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值