我有一个正常工作的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));
答案 0 :(得分:1)
不确定这是否正确,但根据documentation:
要从缓存中受益,您必须通过调用getDrawingCache()来请求绘图缓存,如果返回的位图不为null,则必须在屏幕上绘制它。
对我而言,这意味着您必须先在屏幕上绘制View
一次,然后才能收到任何回复。如果它从未实际绘制过,那么它就没有可以缓存的缓存。你是先在屏幕上看到这个吗?