带有毕加索的谷歌地图集群项目标记图标

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 代码..

以上是关于带有毕加索的谷歌地图集群项目标记图标的主要内容,如果未能解决你的问题,请参考以下文章

如何在同一张地图上使用带有多个标记的谷歌地图 API

新的谷歌地图标记

带有标记的谷歌地图没有出现地图

在 android 谷歌地图中更改集群管理器项目图标

如何在集群中的谷歌地图标记上创建点击事件?

带有多个标记的谷歌地图自动中心