将视图转换为可绘制的地图叠加项

时间:2012-07-25 17:48:22

标签: android bitmap android-mapview drawable

我有一个正常工作的MapView并且正在设置,正在绘制的叠加项(当简称为drawable时)工作得很好。然而,每个可绘制项目需要在其上包括数值(例如,覆盖项目1,需要在其上显示#1)。我创建了布局样式R.layout.map_bubble_standard。我正在尝试将该视图转换为位图,并将该位图转换为可在地图上显示的drawable。但是,当地图加载时,不显示任何内容。这就是我正在做的......

        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));

我的代码很好地完成了方法,但地图上没有绘制任何内容。任何人都可以帮助确定我做错了什么吗?

[编辑] - 已解决

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

希望这也可以帮助其他人。作为参考,我还将视图的inflater和inflater对象本身移动到我的逐项覆盖类的默认构造函数中。

_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));

1 个答案:

答案 0 :(得分:1)

不确定这是否正确,但根据documentation

  

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

对我而言,这意味着您必须先在屏幕上绘制View一次,然后才能收到任何回复。如果它从未实际绘制过,那么它就没有可以缓存的缓存。你是先在屏幕上看到这个吗?