- 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/
我正在尝试将 Google map 集成到我的 xcode 项目中。我严格按照说明here .不幸的是我得到一个错误: error: 'GoogleMaps/GoogleMaps.h' file no
对不起,我是 iOS 开发新手。我使用来自 here 的库在谷歌地图中获取两个地方的方向。我曾经使用过谷歌地图。导入 Google Maps Framework 后,仍然出现错误... 问题是: 如何
我的应用程序有问题。 当我尝试在 上构建它时Android Studio 一切正常,但是当我尝试在 上构建它时Xcode 我遇到错误并且构建失败。 原因似乎来自AirMaps: 词法或预处理器问题'G
昨天我收到一封来自谷歌的电子邮件,说我可以访问 ios 的 map api,我从应用程序控制台生成了我的 key ,然后我按照 https://developers.google.com/maps/d
我想使用谷歌地图显示一些标记。信息(坐标)存储在本地 *.csv 文件中(我想使用“资源文件”)。 如何读取这个 *.csv 文件?如果我使用“jQuery.get('myFile.csv', fun
我正在尝试找出为什么谷歌地图在一天后的表现与一天前有所不同。 我最近将客户的网站上线。地理定位出现错误,我已修复它。但没有在测试站点上修复它。 今天,在两侧(固定一侧和测试一侧)我的地理位置开始显示非
我正在尝试使用地理编码来获取地址,计算出经度和纬度,然后在 map 上显示叠加层。 我正在使用下面的代码,但是日志条目 Log.e("Found",""+lat);永远不会触发,我不知道为什么。有人可
我尝试了大约 4 个小时,但没有发生。尝试开发一个应用程序来显示谷歌地图中的特定位置。 执行以下代码: GooglemapsActivity.java package com.example.gps2
我在尝试显示 googlemaps 时遇到错误 如果我加载 googlemaps javascript 源 我在 Firebug 中得到这个错误 syntax error [Break on this
我正在尝试在 swift 上创建一个 View Controller 来显示用户所在的位置。我已经实现了谷歌地图,所以现在我所要做的就是插入正确的代码。这样做时,我不断收到这两条错误消息,然后应用程序
我正在构建一个出租车应用程序,我设法将所有带有出租车标记图标的汽车添加到它们的确切位置。 但不知为何,所有的图标都看错了方向, 这是我想要实现的目标: 但我得到: 我的代码: 在这里,我只是将我从服务
问题是我向我的应用程序添加了 GoogleMap Activity ,我什至获得了 key ,但 map 只显示在模拟器中。当我在不同的设备上下载我的应用程序时, map 无法使用。我所能看到的只是一
我有两个动画要按顺序在谷歌地图上执行。所以在动画 1 完成后,动画 2 可以继续。 这可以通过这样的回调轻松完成: googleMap.animateCamera(CameraUpdateFacto
最近我的客户想添加这样的功能:当用户有 Internet 连接时, map 会正常显示,但当用户离线启动应用程序时(即使刚刚安装后), map 不会显示,但他仍然可以看到其区域上的标记,但带有自定义背
我正在处理一个处理 map Activity 的项目。我正在运行一个由单个 Activity MaptestActivity 组成的测试应用程序,它扩展了 MapActivity 并且什么都不做。我将
在我的应用程序中,我使用 GoogleMap (play-services-maps:10.2.1)。我已将 map 的位置固定在特定位置,但我不希望我的用户能够移动 map 。我只希望他能够放大它。
我是 java 和 android 的新手。我遇到了一个基本问题。 在这个给定的 fragment 中,我可以将 GoogleMap 对象添加为 parcelable 而无需任何额外的 pracela
我用 googlemap api 制作了一个 android 应用程序,并在叠加层上绘制了一些 16x16 png(大约 200 个)。当我移动或放大/放大 map View 时,经常出现“内存不足”
我正在关注https://developers.google.com/maps/documentation/javascript/directions到目前为止, map 计算特定点之间的距离,但我需
我的 VueJS/Laravel 应用程序没有像我预期的那样正确加载到 GoogleMaps 中。我不明白为什么不调用回调。该功能可用并且应该加载。你能帮助我吗?我没有发现我的错误。我不希望看到 ma
我是一名优秀的程序员,十分优秀!