直到现在我在我的地图上使用drawable填充标记。现在我想知道如果我能在地图中显示自定义imageview作为标记会很酷。
到现在为止我正在做
itemized= new Itemazide(drawable, mContext);
我希望实现像
这样的东西
答案 0 :(得分:2)
我可能会有点晚,但我会为面临/正面临类似问题的其他人发布解决方案。所以基本上你要做的事情(至少对于你正在寻求的解决方案,即在类似盒子的背景上施加的自定义图像)是在画布的帮助下将customImage强加在背景框上。使用此实现,您可以从画布中有效地创建一个BitmapDrawable,然后您可以将其指定为“Overlay”/“ItemizedOverlay”的标记。 此外,请不要为每个叠加层创建一个ImageView,因为如果您必须同时处理数千个这样的ImageView,这将完全破坏您的内存/应用程序。相反,使用可在构造过程中分配给叠加层的BitmapDrawables,并且不会消耗足够的内存作为ImageView。
public BitmapDrawable imageOnDrawable(int drawableBackground, Bitmap customImage)
{
//The following line is optional but I'd advise you to minimize the size of
//the size of the bitmap (using a thumbnail) in order to improve draw
//performance of the overlays (especially if you are creating a lot of overlays).
Bitmap customImageThumbnail = ThumbnailUtils.extractThumbnail(
customImage, 100, 100);
Bitmap bm = BitmapFactory.decodeResource(getResources(), drawableId);
bm = Bitmap.createScaledBitmap(bm, 112, 120, false);
Canvas canvas = new Canvas(bm);
canvas.drawBitmap(bm, 0, 0, null);
// The 6,6 in the below line refer to the offset of the customImage/Thumbnail
// from the top-left corner of the background box (or whatever you want to use
// as your background)
canvas.drawBitmap(customImageThumbnail, 6, 6, null);
return new BitmapDrawable(bm);
}
答案 1 :(得分:1)
是的,我想知道我是否可以做这样的事情,即显示自定义View
而不是drawable。你可以覆盖draw()
方法,但不幸的是它总是(有人请告诉我,我错了)必须是可绘制的。我认为这是因为自定义View
会占用太多内存。
话虽如此,根据你想要实现的目标,可能会破解mapview-baloon库以达到类似的效果。
修改强>
既然您已经展示了您想要实现的目标,我认为您应该覆盖draw()
中的OverlayItem
,并且在此方法中会夸大您的ImageView
。但是我并没有尝试这样做,所以可能存在一些缺点(我记得在类似的事情上有一个SO线程声称它会中断这个OverlayItem
上的所有触摸事件。)
答案 2 :(得分:1)
In google mapv2, map-view ballon like functionality is provided by default.
Just, you have to write some lines for it :
private GoogleMap mapView;
if (mapView == null)
mapView = ((MapFragment) getFragmentManager().findFragmentById(
R.id.map_view)).getMap();
mapView.getUiSettings().setMyLocationButtonEnabled(false);
mapView.setMyLocationEnabled(true);
MarkerOptions markerDestinationOptions;
markerDestinationOptions = new MarkerOptions()
.position(latLngDestination) .icon(BitmapDescriptorFactory.fromResource(R.drawable.marker));
mapView.addMarker(markerDestinationOptions);