在尝试实现使用时ClusterManager,我注意到它已getMap().setOnCameraChangeListener(clusterManager)被弃用.看一下Github上的android-maps-utils示例,我注意到了getMap().setOnCameraIdleListener(mClusterManager);
当我尝试做同样的事情时,我得到一个错误,因为默认ClusterManager类没有实现GoogleMap.OnCameraIdleListener.
然而,在我的gradle文件中,我使用的是最新的maps-util库:
dependencies {
compile 'com.google.maps.android:android-maps-utils:0.4.3'
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能访问最新的ClusterManager课程?谢谢
我有一个Android应用程序,大约有500-1000个标记.我现在用的是ClusterManager从Android的地图-utils的如这里群集这些标记.
在最新的Play服务更新中,Google更改了Google地图的收听模型.将OnCameraChangeListener被标记为已弃用.相反,有四个新的听众(OnCameraIdleListener, OnCameraMoveListener, OnCameraMoveStartedListener,OnCameraMoveCanceledListener).
自那次更新以来,我的应用程序非常慢.它坚持移动/缩放地图,聚类过程滞后,需要几秒钟.
我认为这种行为可能与侦听器模型中的更改有关.因此我试图addOnCameraChangeListener(clustermanager)用新的替换功能addOnCameraIdleListener(clustermanager).不幸的是,这不起作用,因为ClusterManager没有实现必要的接口.
这就是它变得奇怪的地方,因为ClusterManagerGitHub上的当前版本(0.4.3)确实实现了该接口.所以它应该工作.
我正在使用Gradle导入ClusterManager:
compile 'com.google.maps.android:android-maps-utils:0.4.3
但我的本地版本ClusterManager似乎仍然是一个旧的实现旧版本OnCameraChangeListener.
那么这里有什么问题?这是Gradle的不当行为吗?有人知道如何解决这个问题吗?自上次播放服务更新以来,Google Map/Clusterer的播放速度是否缓慢且有任何其他人?
我感谢任何帮助.多谢你们.
android markerclusterer google-maps-android-api-2 android-maps-utils
我polyline在地图上绘图,现在需要向用户显示一些数据。
如何在每个上绘制文本或InfoWindow polyline?
我添加polyline像:
ArrayList<LatLng> points = null;
PolylineOptions lineOptions = null;
MarkerOptions markerOptions = new MarkerOptions();
// Traversing through all the routes
for(int i=0;i<result.size();i++){
points = new ArrayList<LatLng>();
lineOptions = new PolylineOptions();
String color = colors[i % colors.length];
// Fetching i-th route
List<HashMap<String, String>> path = result.get(i);
// Fetching all the points in i-th route
for(int j=0;j<path.size();j++){
HashMap<String,String> point = path.get(j);
double lat = Double.parseDouble(point.get("lat"));
double lng = Double.parseDouble(point.get("lng"));
LatLng position = new LatLng(lat, …Run Code Online (Sandbox Code Playgroud) 在 crashlytic 仪表板上,我可以看到各种设备上的大量崩溃 - 三星、摩托罗拉、索尼等操作系统 - Android 4、5、6。
Fatal Exception: java.lang.RuntimeException
createContext failed: 12291
com.google.maps.api.android.lib6.gmm6.vector.ba.a
com.google.maps.api.android.lib6.gmm6.vector.ba.a (:com.google.android.gms.dynamite_mapsdynamite@14799008@14.7.99 (000306-223214910):22)
com.google.maps.api.android.lib6.gmm6.vector.bb.run (:com.google.android.gms.dynamite_mapsdynamite@14799008@14.7.99 (000306-223214910):161)
Run Code Online (Sandbox Code Playgroud)
注意 - 这些是真实设备而不是模拟器,我可以在其中将设置更改为 Software GLES 2.0 。
我对 Android Studio 和 Java 很陌生。我尝试制作带有一些兴趣点的地图应用程序。这些点是一个 geojson 文件。我阅读了 google 的示例及其网站(Google Maps Android GeoJSON Utility)中的说明,但我的代码中有一些错误。第一个错误是关于 getmMap 方法,(错误:找不到符号方法 getnMap())。我找到解决方案的第二个是关于文件它不需要扩展名(geojson)。我在 rs 中创建了一个名为 raw 的文件夹,并在其中添加了 geojson 文件。
MapsActivity.java 的完整代码
package com.example.vassilis.goldman_find_atm;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.maps.android.data.geojson.GeoJsonLayer;
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
private static final int MY_REQUEST_INT = 177;
private GoogleMap mMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); …Run Code Online (Sandbox Code Playgroud) 我正在使用Google Maps V2 for Android和maps utils扩展库进行标记聚类.应用程序的某些部分不需要获取聚集标记.
有没有办法禁止clusterManager集群标记,并在某些条件后让它再次集群项目?
我正在使用android-maps-utils 中的聚类在 Android 中的 Google 地图上对标记进行聚类。我想在地图处于最大缩放级别时禁用聚类(即,如果地图处于最大缩放级别,则始终呈现单个 ClusterItems,否则群集正常)。
通过在扩展 DefaultClusterRenderer 的自定义类中对 shouldRenderAsCluster() 中的缩放级别进行测试,我几乎可以让它工作。但是,我的解决方案比实际缩放级别落后一步。例如,如果地图的最大缩放级别为 21,并且用户从级别 20 放大到级别 21,则 shouldRenderAsCluster 中的检查将获得当前缩放级别 20。如果用户然后缩小到级别 20,检查将获得第 21 级。 ClusterItems 像我想要的那样被渲染为单个项目,但是一个缩放操作为时已晚。
我从 DefaultClusterRenderer 中设置的变量 mZoom 中获得了“当前缩放”(显然不是真正的当前缩放)。
这是代码:
public class UserClusterRenderer extends PosMapDefaultClusterRenderer<UserClusterItem> {
// ...
@Override
protected boolean shouldRenderAsCluster(Cluster cluster) {
return mZoom < mMap.getMaxZoomLevel() && cluster.getSize() > 1;
}
}
Run Code Online (Sandbox Code Playgroud)
变量 mZoom 和 mMap 在 DefaultClusterRenderer 中设置。因为他们在那里有私有访问权限,所以我制作了一个名为 PosMapDefaultClusterRenderer 的 DefaultClusterRenderer 副本。唯一的区别是 mZoom 和 mMap 被声明为受保护的,因此它们可以在 UserClusterRenderer 中访问。
为什么 mZoom 会落后一个缩放操作?有没有办法获得正在渲染集群的真实缩放级别?
缩放是通过使用来自cameraPosition 的cameraUpdate 调用animateCamera 来完成的。 …
java android google-maps google-maps-android-api-2 android-maps-utils
我有一个 LatLng 点列表,我想将其显示为 Google 地图上的标记。\n我当前正在按以下方式计算适合所有点的相机视图:
\n\n首先,我用所有点计算 LatLngBounds。
\n\nIterator<LatLng> i = items.iterator();\nLatLngBounds.Builder builder = LatLngBounds.builder();\nwhile (i.hasNext()) {\n builder.include(i.next());\n}\nLatLngBounds bounds = builder.build();\nRun Code Online (Sandbox Code Playgroud)然后我使用适当的方法:
\n\nCameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngBounds(bounds, padding);\nRun Code Online (Sandbox Code Playgroud)该更新提供了我所有观点的良好视图,并有一些不错的填充。
\n\n问题
\n\nI\xe2\x80\x99d 喜欢对 paddingTop、paddingBottom、paddingLeft 和 paddingRight 应用不同的值。也就是说,我两边都没有任何东西,然后我在顶部有一个浮动工具栏(大约50dp),在底部有一个浮动卡(大约200dp)。
如果我不添加填充,某些点将被顶部工具栏或底部卡片覆盖。
\n\n如果我添加最大填充(200dp),那么顶部、左侧和右侧都会有巨大的间隙。任何想法?
__________________________\n| ___________o__________ |\n| | | |\n| |____________________|o|\n| o |\n| o |\n| o |\n| MAP |\n| o |\n| o |\n| ______________________ |\n| | | |\n|o| | |\n| …Run Code Online (Sandbox Code Playgroud) android google-maps google-maps-markers google-maps-android-api-2 android-maps-utils
如何创建两个侦听器?一个用于群集,另一个将新的群集项加载到地图,如果地图上不存在群集项.
//needed for clustering
map.setOnCameraChangeListener(mClusterManager);
// need for loading clusteritems
map.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition position) {
// ifMarkesNotInsideMapReload...
Run Code Online (Sandbox Code Playgroud)
我认为这不可能,但有人可能会解决这个问题......
一个想法是设置一个起始位置并手动轮询更改..不酷:-)
我使用android-maps-utils,我想知道这种情况是否可行:
是否可以调整缩放级别以对群集标记进行去群集并显示所选标记?
//此行将缩放到特定点map.animateCamera(CameraUpdateFactory.newLatLng(fault.getPosition()),null);
我不知道如何解除聚焦/缩放以显示特定的引脚,而无需设置最大/最小缩放