我在运行Google Maps Android API Utility Demo时遇到问题,它显示以下错误:
04-03 16:32:37.397: E/dalvikvm(2592): Could not find class 'com.google.maps.android.utils.demo.ClusteringDemoActivity', referenced from method com.google.maps.android.utils.demo.MainActivity.onCreate
04-03 16:32:37.452: E/AndroidRuntime(2592): FATAL EXCEPTION: main
04-03 16:32:37.452: E/AndroidRuntime(2592): java.lang.NoClassDefFoundError: com.google.maps.android.utils.demo.ClusteringDemoActivity
04-03 16:32:37.452: E/AndroidRuntime(2592): at com.google.maps.android.utils.demo.MainActivity.onCreate(MainActivity.java:20)
04-03 16:32:37.452: E/AndroidRuntime(2592): at android.app.Activity.performCreate(Activity.java:5163)
04-03 16:32:37.452: E/AndroidRuntime(2592): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
04-03 16:32:37.452: E/AndroidRuntime(2592): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2061)
04-03 16:32:37.452: E/AndroidRuntime(2592): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2122)
04-03 16:32:37.452: E/AndroidRuntime(2592): at android.app.ActivityThread.access$600(ActivityThread.java:140)
04-03 16:32:37.452: E/AndroidRuntime(2592): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1228)
04-03 16:32:37.452: E/AndroidRuntime(2592): at android.os.Handler.dispatchMessage(Handler.java:99)
04-03 16:32:37.452: E/AndroidRuntime(2592): at android.os.Looper.loop(Looper.java:137)
04-03 16:32:37.452: E/AndroidRuntime(2592): at android.app.ActivityThread.main(ActivityThread.java:4895)
04-03 …Run Code Online (Sandbox Code Playgroud) 我知道使用以下方法点击标记时可以避免使相机居中:
mGoogleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
marker.showInfoWindow();
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
但是,我遇到的问题是现在我想使用群集,当然我想在标记(实际上是项目或群集)的时候看到信息窗口.但我不知道在这些情况下如何调用类似showInfoWindow的东西.在这段代码中,如果我返回false,我会看到信息窗口,但是map是居中的.如果我返回true,则map不居中,但不显示info窗口:
mClusterManager.setOnClusterItemClickListener(new ClusterManager.OnClusterItemClickListener<HotspotMarker>() {
@Override
public boolean onClusterItemClick(HotspotMarker item) {
Log.e(LOG_TAG, "---OnClusterItemClick");
return false;
}
});
mClusterManager.setOnClusterItemInfoWindowClickListener(new ClusterManager.OnClusterItemInfoWindowClickListener<HotspotMarker>() {
@Override
public void onClusterItemInfoWindowClick(HotspotMarker hotspotMarker) {
Log.e(LOG_TAG, "---onClusterItemInfoWindowClick");
HotspotDetailActivity.hotspot = hotspotMarker.getHotspot();
Intent intent = new Intent(getActivity(), HotspotDetailActivity.class);
startActivity(intent);
}
});
mClusterManager.setOnClusterClickListener(new ClusterManager.OnClusterClickListener<HotspotMarker>() {
@Override
public boolean onClusterClick(Cluster<HotspotMarker> cluster) {
Log.e(LOG_TAG, "---OnClusterClickListener");
return false;
}
});
mClusterManager.setOnClusterInfoWindowClickListener(new ClusterManager.OnClusterInfoWindowClickListener<HotspotMarker>() {
@Override
public void onClusterInfoWindowClick(Cluster<HotspotMarker> cluster) {
Log.e(LOG_TAG, "---onClusterInfoWindowClick"); …Run Code Online (Sandbox Code Playgroud) android google-maps google-maps-markers google-maps-android-api-2 android-maps-utils
我为每个集群项目使用动态图标,所以我有特殊的图标 url 和从 url 加载标记图标。我使用以下代码:
override fun onBeforeClusterItemRendered(item: T, markerOptions: MarkerOptions?) {
super.onBeforeClusterItemRendered(item, markerOptions)
try {
var url = URL("https://cdn3.iconfinder.com/data/icons/places/100/map_pin_big_1-128.png")
Glide.with(context)
.asBitmap()
.load(url)
.into(object : CustomTarget<Bitmap>() {
override fun onLoadCleared(placeholder: Drawable?) {
}
override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
markerOptions?.icon(BitmapDescriptorFactory.fromBitmap(resource))
}
})
} catch (ex: Exception) {
Log.e("map", ex.toString())
}
Run Code Online (Sandbox Code Playgroud)
}
在我的情况下,某些图标仍然默认,放大后有时会更改缩小图标。问题是此代码不适用于每个集群项,缩放更改的集群图标也更改后,它可能会呈现我的自定义图标并可能使用默认值。
android google-maps markerclusterer android-maps-utils android-glide
我将 Google Map SDK 7.3.0 与 android-maps-utils 0.3.4 一起使用,因为我需要为地图上的标记创建集群。

好的,所以问题是,我不应该有红色标记。只有绿色+蓝色标记。我子类化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) {
}
});
Run Code Online (Sandbox Code Playgroud)