- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想在谷歌地图上实现标记聚类。它也应该涉及自定义渲染。所以我使用了 https://github.com/googlemaps/android-maps-utils 中的示例代码,
引用演示中的 CustomMarkerClusteringDemoActivity.java。
我的问题是,当我单击集群时,它不会调用 onClusterClick()。与单击集群项类似,不会调用 onClusterItemClick()。
我不明白哪里出错了,请帮忙....
我正在使用:
第 1 步:
private ClusterManager<MarkerCluster> mClusterManager;
第 2 步:
private class MarkerRenderer extends DefaultClusterRenderer<MarkerCluster> {
private final IconGenerator mIconGenerator =
new IconGenerator(context.getApplicationContext());
private final IconGenerator mClusterIconGenerator =
new IconGenerator(context.getApplicationContext());
private final ImageView mImageView = null;
private final TextView mClusterTextCounter;
private final ImageView mClusterImageView;
private final int mDimension = 0;
public MarkerRenderer() {
super(context.getApplicationContext(), mMap, mClusterManager);
View multiProfile = getActivity().getLayoutInflater()
.inflate(R.layout.layout_marker_render, null);
mClusterIconGenerator.setContentView(multiProfile);
mClusterImageView = (ImageView)multiProfile
.findViewById(R.id.lyt_marker_render_img_pin);
mClusterTextCounter = (TextView) multiProfile
.findViewById(R.id.lyt_marker_render_txt_counter);
}
@Override
protected void onBeforeClusterItemRendered(MarkerCluster markercluster, MarkerOptions markerOptions) {
// Draw a single person.
// Set the info window to show their name.
Item mItem = markercluster.getItem();
if(mItem != null){
if(mItem.get_UserType().equalsIgnoreCase("2")){
markerOptions
.title(mItem.get_maker() + " - " + mItem.get_carModel())
.icon(icon_blue);
}else{
markerOptions
.title(mItem.get_maker() + " - " + mItem.get_carModel())
.icon(icon_gray);
}
}
}
@Override
protected void onBeforeClusterRendered(Cluster<MarkerCluster> cluster, MarkerOptions markerOptions) {
// Draw multiple people.
// Note: this method runs on the UI thread. Don't spend too much time in here (like in this example).
mClusterTextCounter.setText(cluster.getItems().size() + "");
Drawable myDrawable;
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
myDrawable = context.getResources()
.getDrawable(R.drawable.pin_blue, context.getTheme());
} else {
myDrawable = context.getResources()
.getDrawable(R.drawable.pin_blue);
}
mClusterImageView.setImageDrawable(myDrawable);
mClusterIconGenerator.setBackground(
context.getResources().getDrawable(R.drawable.map_btn)
);
Bitmap icon = mClusterIconGenerator.makeIcon(
String.valueOf(cluster.getSize())
);
markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon));
}
@Override
protected boolean shouldRenderAsCluster(Cluster cluster) {
// Always render clusters.
return cluster.getSize() > 1;
}
}
第 3 步:
mClusterManager = new ClusterManager<MarkerCluster>(context, mMap);
mClusterManager.setRenderer(new MarkerRenderer());
mMap.setOnMarkerClickListener(mClusterManager);
mMap.setOnInfoWindowClickListener(mClusterManager);
mMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition cameraPosition) {
if (mClusterManager != null) {
mClusterManager.onCameraChange(cameraPosition);
}
// Some Other Tasks here
}
});
mClusterManager.setOnClusterClickListener(
new ClusterManager.OnClusterClickListener<MarkerCluster>() {
@Override
public boolean onClusterClick(Cluster<MarkerCluster> cluster) {
LatLngBounds.Builder builder = LatLngBounds.builder();
for (MarkerCluster item : cluster.getItems()) {
builder.include(item.getPosition());
}
final LatLngBounds bounds = builder.build();
mMap.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, 100));
return true;
}
});
mClusterManager.setOnClusterItemClickListener(
new ClusterManager.OnClusterItemClickListener<MarkerCluster>() {
@Override
public boolean onClusterItemClick(MarkerCluster markerCluster) {
Item item = markerCluster.getItem();
if (mItem != null) {
MarkerClickDialog mMarkerClickDialog = new MarkerClickDialog(context, mItem);
mMarkerClickDialog.show();
}
return false;
}
});
for (int i = 0; i < mItemList.size(); i++) {
Item mItem = mItemList.get(i);
if (mMap != null) {
displayLocation(
Double.parseDouble(mItem.get_Latitude()),
Double.parseDouble(mItem.get_Longitude()),
mItem
);
}
}
private void displayLocation(double latitude, double longitude, Item mItem){
// create marker
if(mMap != null){
Marker mMarker = null;
MarkerCluster offsetItem = new MarkerCluster(new LatLng(latitude, longitude), "Test", R.drawable.pin_blue, mItem);
mClusterManager.addItem(offsetItem);
mClusterManager.cluster();
}
}
最佳答案
在您的 MarkerRenderer
构造函数中,有 super(context.getApplicationContext(), mMap, mClusterManager);
您仍然需要 GoogleMap 对象和 ClusterManager。您应该将参数传递给构造函数!像这样写:
public CustomRenderer(Context context, GoogleMap map, ClusterManager clusterManager) {
super(context, map, clusterManager);
...
然后在设置Renderer的时候,这样写
mClusterManager.setRenderer(new MarkerRenderer(mContext, mMap, mClusterManager));
关于android - GoogleMap android 中的 ClusterManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31965031/
我正在尝试使用 ClusterManager 来对我的 CustomMapMarker 进行聚类,但是当标记数据发生变化时,我调用了 mClusterManager.cluster(),引脚位置不变。
在尝试使用 ClusterManager 时,我注意到 getMap().setOnCameraChangeListener(clusterManager) 已被弃用。查看 Github 上的 and
大家下午好,我用集群管理器管理我的 google maps v2(我正在使用这个库 android-maps-utils),我想在单击标记和单击集群管理器时获得差异,但是方法没有调用,那么我的代码出了
我在 Android 中使用 Google map ,其中有大约 800 个我想要聚类的标记和 80 个我不想聚类的标记。 对于我想要聚类的标记,我使用以下方法添加到 clusterManager m
这是我之前问题的后续问题:ClusterManager isn't redrawing Markers 我做了一些调查,发现了一些有趣的东西。 ClusterManager.clearItems()
在我的 Android 应用程序中,我必须在我的 GoogleMap 中删除并重新添加一个代表我当前位置的集群项。但是当我运行这段代码时: clusterMng.remove(myitem); 我得到
我正在使用 ClusterManager 对 android 应用程序中的标记进行分组。 我想获取标记列表并使用 mClusterManager.getMarkerCollection().getMa
在此处输入代码我需要在 Google map 上显示标记的集群。我有自定义对象: public class PostClusterItem implements ClusterItem { priva
我想在谷歌地图上实现标记聚类。它也应该涉及自定义渲染。所以我使用了 https://github.com/googlemaps/android-maps-utils 中的示例代码, 引用演示中的 Cu
对不起我的英语 我尝试了 ClusterManager.getMarkerCollection().getMarkers()方法,但它返回空集合。 我在我的应用程序中使用 Google Maps Ut
我正在尝试在我的集群 Google map 上获取对我的标记的引用(不使用 getMarkerCollections)但我找不到在哪里覆盖此功能。 我制作了一个典型的 ClusterManager,它
我可以使用哪个上下文来初始化 Kotlin Android 中的 ClusterManager? var clusterManager: ClusterManager? = null clusterM
使用 google maps api v2 for android 和 Google-Map-Utils 的集群库(渲染器和管理器) . 是否可以在两个或多个标记聚集在一起时关闭动画? 最佳答案 是的
我正在尝试为 Google Map 使用两个 ClusterManager,但我只能添加一个 clustermanager 和它的项目点击事件, googleMap.setOnMarkerClickL
我正在尝试使用来自服务器的较新数据更新我的 map ,但我不知道如何从中删除旧项目(标记和集群 - 使用 ClusterManager) map ( - 在我看来,我只能在 ClusterManage
我的 Android 应用程序中有一个谷歌地图。它充满了标记,它聚集了标记……简而言之,这是一张完全可用的 map 。 我想做的很简单。当用户点击 clusterItem 时,我想将图标更改为选定的图
我正在尝试在我的 Android 项目中使用 Google map 集群。 目前,我实际上是从演示中复制了代码 https://github.com/googlemaps/android-maps-u
我编写了以下方法来显示我的标记(集群)。然而,一些集群工作正常 - 即当我放大时,蓝色集群图标(表示 10+ for ex)消失并显示各个标记。但是,有时,当我完全放大时,蓝色群集标记仍然与单个标记之
我有一个 Google Maps V2,在我的 setUpMap() 方法中,我将 GoogleMap 附加到一个 infoWindowAdapter,如下所示: ClusterManager ren
我有一个让我发疯的问题。我已经使用集群管理器实现了一个带有一堆点的 map ,我的管理器设置如下: mClusterManager = new ClusterManager(getActivity()
我是一名优秀的程序员,十分优秀!