在MapView上点击OverlayItem后,Popup Balloons随机消失

时间:2010-07-13 15:49:54

标签: android

我有一个使用mapview-overlay-manager代码的应用程序,使用来自web api的LazyLoadManager在MapView上绘制地图标记。当我拖动地图时,标记会按预期加载/卸载。

点击标记后,我会对 balloon.xml 文件进行充气,并使用它在标记上方显示一个气球。这就是问题所在。它工作,但突然(我不能一直重复)气球覆盖将停止显示在屏幕上。

虽然很奇怪,因为标记仍然显示它被轻拍,但随后气球停止显示。我已经检查过气球不是null(它不是),并且itemInfo不为null。它只是在调用.addView(...)之后才被添加到MapView中,但所有参数都是有效的。

旁注:任何时候发生这种情况,所有叠加都会变暗,叠加阴影会从半透明变为黑色。我不知道是什么造成了这种情况,但它同时发生,这让我相信它是一个绘图问题。

以上问题的代码如下。任何提示/想法/等将不胜感激。

@Override
        public boolean onSingleTap(MotionEvent e, ManagedOverlay overlay, GeoPoint point, ManagedOverlayItem item) {

            if(mBalloon != null) 
            {
                mMapView.removeView(mBalloon);
                mBalloon = null; 
            } 

            if(item != null) {
                //Toast.makeText(getApplicationContext(), item.getTitle(), Toast.LENGTH_SHORT).show();
                MapView.LayoutParams balloonLayoutParams = new MapView.LayoutParams(350, MapView.LayoutParams.WRAP_CONTENT, item.getItemInfo().getMarkerPoint(mMapView.getProjection()), MapView.LayoutParams.BOTTOM_CENTER);


                if(mBalloon == null) {
                    if(mLayoutInflater == null) {
                        mLayoutInflater = getLayoutInflater();
                    }
                    ViewGroup parent = (ViewGroup)mMapView.getParent(); 
                    mBalloon = (BalloonLayout) mLayoutInflater.inflate(R.layout.balloon_layout, parent, false); 


                } 

                TextView title = (TextView)mBalloon.findViewById(R.id.title); 
                title.setText(item.getItemInfo().getTitle()); 

                TextView subTitle = (TextView)mBalloon.findViewById(R.id.subTitle); 
                subTitle.setText(item.getItemInfo().getBalloonSubTitle()); 

                if(DEBUG) Log.d(TAG, "Setting on click listener.");
                ((ImageButton)mBalloon.findViewById(R.id.go_button)).setOnClickListener(new ViewItemInfoListener(item.getItemInfo()));

                mMapView.addView(mBalloon, balloonLayoutParams);
            }
            return false;

        }
    });

    // Fires off the background event to get the 
    overlayManager.populate();
}

2 个答案:

答案 0 :(得分:0)

您是否在OnDrag期间考虑过:删除所有标记并保存在临时列表中,启动计时器(问题200-500毫秒),然后在计时器到期后重新填充标记。如果在计时器到期之前发生了另一个OnDrag,则重新启动计时器。

答案 1 :(得分:0)

好的,我发现了问题。有一个父方法调用此方法。不幸的是,这种方法被调用了两次。一旦进入onFocusChanged()并进入onCreate()。删除其中一个治愈了这个问题。由于这个原因,图标和气球都是双重绘制的。