0

我有一个可以正常工作并已设置的 MapView,正在绘制的覆盖项目(当简单地引用为可绘制对象时)工作得很好。但是,每个可绘制项都需要在其上包含一个数值(例如,叠加项 1,需要在其上显示 #1)。我创建了布局样式 R.layout.map_bubble_standard。我正在尝试将该视图转换为位图,并将该位图转换为要在地图上显示的可绘制对象。但是,当地图加载时,什么都没有显示。这就是我正在做的...

        LayoutInflater inflater = (LayoutInflater) _context.getSystemService(     Context.LAYOUT_INFLATER_SERVICE );
        LinearLayout bubbleView = (LinearLayout)inflater.inflate(R.layout.map_bubble_standard, null);

        bubbleView.setDrawingCacheEnabled(true);
        bubbleView.buildDrawingCache();

        //drawable = _context.getResources().getDrawable(R.drawable.map_pin_48);
        drawable = new BitmapDrawable(_context.getResources(), bubbleView.getDrawingCache());
        bubbleView.setDrawingCacheEnabled(false);

    OverlayItem oi = _overlays.get(whichOne); 
    oi.setMarker(boundCenterBottom(drawable));

我的代码很好地完成了该方法,但没有在地图上绘制任何内容。谁能帮助确定我做错了什么?

[编辑] - 已解决

我使用了我找到的另一个链接,它提供了解决此问题的建议: 这里

希望这也可以在将来帮助其他人。作为参考,我还将视图的充气机和充气机对象本身移到了逐项叠加类的默认构造函数中。

_bubbleLayout.setDrawingCacheEnabled(true);

        _bubbleLayout.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 
                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
        _bubbleLayout.layout(0, 0, _bubbleLayout.getMeasuredWidth(), _bubbleLayout.getMeasuredHeight()); 

        _bubbleLayout.buildDrawingCache(true);
        Bitmap b = Bitmap.createBitmap(_bubbleLayout.getDrawingCache());
        _bubbleLayout.setDrawingCacheEnabled(false); // clear drawing cache 

        //drawable = _context.getResources().getDrawable(R.drawable.map_pin_48);
        drawable = (Drawable) new BitmapDrawable(_context.getResources(),b);



    OverlayItem oi = _overlays.get(whichOne); 
    oi.setMarker(boundCenterBottom(drawable));
4

1 回答 1

1

不确定这是否正确,但根据文档

要从缓存中受益,您必须通过调用 getDrawingCache() 请求绘图缓存,如果返回的位图不为空,则将其绘制在屏幕上。

对我来说,这意味着你必须View在屏幕上画一次,然后才能得到任何东西。如果它从未被实际绘制过,那么它就没有缓存可供提取。您是否首先在屏幕上显示此内容?

于 2012-07-25T18:02:41.593 回答