6

到目前为止,我一直在使用 drawable 在我的地图上填充标记。现在我想知道如果我可以将自定义图像视图显示为地图中的标记会很酷。

直到现在我都在这样做

      itemized= new Itemazide(drawable, mContext);

我想实现类似

这

4

3 回答 3

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

}
于 2012-07-09T18:55:38.407 回答
1

是的,我想知道我是否可以做这样的事情,即显示自定义View而不是可绘制的。您可以覆盖draw()方法,但不幸的是它总是(请告诉我我错了)必须是可绘制的。我认为这是因为自定义View会占用太多内存。

话虽如此,根据您要实现的目标,可能可以破解mapview-baloon库以实现一些类似的效果。

编辑: 既然你已经展示了你想要实现的目标,我认为你应该draw()在你的OverlayItem和这个方法中覆盖你的ImageView. 但是我没有尝试这样做,所以可能会有一些缺点(我记得一个类似问题的 SO 线程声称它会中断所有触摸事件OverlayItem)。

于 2012-04-09T07:57:12.313 回答
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);
于 2015-11-27T07:47:56.147 回答