如何将一个磁贴集添加到NavigationView?
我的第一尝试是使用Mapbox Studio创建整个样式并将其链接到图块。然后我将样式添加到片段内部的NavigationView中
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
[...]
// Mapbox
navigationView = view.findViewById(R.id.mapboxNavigationView);
navigationView.onCreate(null);
[...]
navigationView.initialize(this, initialPosition);
return view;
}
@SuppressLint("MissingPermission")
@Override
public void onNavigationReady(boolean isRunning) {
mapboxMap = navigationView.retrieveNavigationMapboxMap().retrieveMap();
mapboxMap.setStyle("mySecretStyle", new Style.OnStyleLoaded() {
@Override
public void onStyleLoaded(@NonNull Style style) {
// Never called ...
}
});
}
样式已成功添加,您可以在此处看到。
但是出现以下错误,无法开始导航
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'java.util.List com.mapbox.mapboxsdk.maps.Style.getSources()'在com.mapbox.services.android.navigation.ui.v5.map.NavigationMapboxMap.initializeWayName(NavigationMapboxMap.java:668)在com.mapbox.services.android.navigation.ui.v5.map.NavigationMapboxMap.addProgressChangeListener(NavigationMapboxMap.java:277)在com.mapbox.services.android.navigation.ui.v5.NavigationView.initializeNavigationListeners(NavigationView.java:691)在com.mapbox.services.android.navigation.ui.v5.NavigationView.initializeNavigation(NavigationView.java:632)在com.mapbox.services.android.navigation.ui.v5.NavigationView.startNavigation(NavigationView.java:394)
[我的第二种方法是仅添加在Mapbox Studio中上传的图块:
@Override
public void onNavigationReady(boolean isRunning) {
mapboxMap = navigationView.retrieveNavigationMapboxMap().retrieveMap();
mapboxMap.getStyle(new Style.OnStyleLoaded() {
@Override
public void onStyleLoaded(@NonNull Style style) {
String sourceId = "indoor-source";
style.addSource(new RasterSource(sourceId, "mytileid"));
String layerId = "indoor-layer";
RasterLayer rasterLayer = new RasterLayer(layerId, sourceId);
style.addLayer(rasterLayer);
}
});
}
但是那也不起作用-但至少导航以默认导航样式运行。
我的第三次尝试(使用有效样式)
@Override
public void onNavigationRunning() {
navigationView.retrieveNavigationMapboxMap().retrieveMap().setStyle("mySecretStyle");
}
...结果为SIGSEGV
---------崩溃开始2020-02-28 15:49:32.835 A / libc:致命信号11(SIGSEGV),代码1(SEGV_MAPERR),故障加法器0x681713e80325b4在tid 29828(oid.med ....),pid 29828(oid.med ....)]
有什么想法吗?
mapboxMap.setStyle("mySecretStyle",
。您只是通过样式ID而不是那里的mySecretStyle
?如果是这样,则应改用new Style.Builder().fromUri()
。mapboxMap.setStyle(new Style.Builder().fromUri("styleIdHere"), new Style.OnStyleLoaded() {
@Override
public void onStyleLoaded(@NonNull Style style) {
}
});
您的图块集是否来自Mapbox Tilesets API?如果是这样:
确保图块为public
。您可以通过Mapbox Studio将此公开设置。
您在代码中使用VectorSource
。 https://github.com/mapbox/mapbox-android-demo/search?q=VectorSource&unscoped_q=VectorSource显示Mapbox演示应用程序中的VectorSource
使用情况。演示应用程序示例也位于https://docs.mapbox.com/android/maps/examples。
如果您使用的是RasterSource
,请参阅演示应用程序中https://github.com/mapbox/mapbox-android-demo/search?q=RasterSource&unscoped_q=RasterSource用法中的RasterSource
。可能是您未正确初始化各种源对象。
[通常,如果您可以解释要添加的数据类型,我可能会为您提供进一步的帮助。您也可以将所需的数据添加到Mapbox Studio中的样式中,而不是在设备上的运行时中。然后,您要做的就是加载样式。