带有毕加索的谷歌地图集群项目标记图标
Posted
技术标签:
【中文标题】带有毕加索的谷歌地图集群项目标记图标【英文标题】:Google Maps Cluster Item Marker Icon with Picasso 【发布时间】:2015-07-08 22:30:18 【问题描述】:我正在使用带有 android-maps-utils 0.3.4 的 Google Map SDK 7.3.0,因为我需要为地图上的标记使用集群。
好的,问题是,我不应该有红色标记。只有绿色+蓝色标记。
我将DefaultClusterRenderer
子类化以创建我的自定义标记视图,但有时它只是不起作用。
我正在使用 picasso 来获取绿色图标,因为它来自 API。但问题是,当毕加索加载位图时为时已晚,图标已经设置为默认值(红色)。
这是我的 onBeforeClusterItemRenderer :
Picasso.with(getApplicationContext()).load(item.url).into(new Target()
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from)
FrameLayout icon = (FrameLayout) LayoutInflater.from(getApplicationContext()).inflate(R.layout.marker, null);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
icon.findViewById(R.id.bg).setBackground(new BitmapDrawable(getResources(), bitmap));
else
icon.findViewById(R.id.bg).setBackgroundDrawable(new BitmapDrawable(getResources(), bitmap));
Bitmap b = createDrawableFromView(Home.this, icon);
if (marker != null)
marker.icon(BitmapDescriptorFactory.fromBitmap(b));
@Override
public void onBitmapFailed(Drawable errorDrawable)
@Override
public void onPrepareLoad(Drawable placeHolderDrawable)
);
【问题讨论】:
您发布了一些关于如何将标记(集群)添加到地图视图的代码以及DefaultClusterRenderer
子类的代码。另外,红色标记出现是因为那些区域只有一个标记吗?如果超过1个,它们会成为集群图标吗?
@ztan 我的onBeforeClusterItemRendered
有点复杂,因为我使用从 xml 膨胀的自定义视图,然后从 picasso 添加一个位图,然后因为它是一个标记,所以获取该布局的位图。跨度>
这是因为您使用匿名类作为目标。对于每个标记,您需要创建一个新目标并将对它的引用存储在列表或哈希图中,这样它就不会被垃圾收集并在位图成功下载后更新。
【参考方案1】:
--- 已编辑 ---
在onBeforeClusterItemRendered
中下载图像时,实际上是每次集群管理器尝试加载标记时都在下载图像,因此,例如,如果您有 100 个标记,您将下载图像 100 次。
你应该下载onCreate
里面的图片,保存在一个静态变量中,保存图片后调用mClusterManager.cluster();
,最后在onBeforeClusterItemRendered
里面写marker.icon(BitmapDescriptorFactory.fromBitmap(YourActivity.b));
【讨论】:
不,我根本不应该拥有它们。我有我的onBeforeClusterItemRendered
,所以我不应该有红色标记。
哦,我现在明白了,所以您可以下载图像并将其用作标记图标,但有时它只显示红色标记图标。然后你应该发布你的onBeforeClusterItemRendered
代码..以上是关于带有毕加索的谷歌地图集群项目标记图标的主要内容,如果未能解决你的问题,请参考以下文章