Android 具有自定义瓷砖集或样式的Mapbox NavigationView
如何向NavigationView添加一个tileset 我的第一次尝试是使用Mapbox Studio创建一个完整的样式,并将一个瓷砖集链接到它。然后我将样式添加到片段内部的NavigationView中Android 具有自定义瓷砖集或样式的Mapbox NavigationView,android,mapbox,navigationview,Android,Mapbox,Navigationview,如何向NavigationView添加一个tileset 我的第一次尝试是使用Mapbox Studio创建一个完整的样式,并将一个瓷砖集链接到它。然后我将样式添加到片段内部的NavigationView中 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { [...] // Mapbox naviga
@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)
我的第二种方法是只添加一个tileset,上传到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);
}
});
}
但这也不起作用——但至少导航是以默认的导航样式运行的
我的第三次尝试(使用有效的样式)
…生成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”),而不是mySecretStyle
。你只是通过你的样式id而不是那里的mySecretStyle
?如果是这样,你应该使用new style.Builder().fromUri()
- 确保瓷砖集是公共的。您可以通过Mapbox Studio设置此公共
- 您正在代码中使用
。显示Mapbox演示应用中的VectorSource
用法。演示应用示例也位于VectorSource
光栅源
,请参阅演示应用程序中的光栅源
用法。可能是您错误地初始化了各种源对象一般来说,如果你能解释一下你想添加什么类型的数据,我可能会进一步帮助你。你也可以在Mapbox Studio中将你想要的数据添加到样式中,而不是在设备上的运行时。然后,你所要做的就是加载样式。嘿,langsmith,我使用了RasterSource。但我的错误是没有添加“Mapbox://”在我的tileset ID之前,wich是私人的。非常感谢您的回答!
@Override
public void onNavigationRunning() {
navigationView.retrieveNavigationMapboxMap().retrieveMap().setStyle("mySecretStyle");
}
mapboxMap.setStyle(new Style.Builder().fromUri("styleIdHere"), new Style.OnStyleLoaded() {
@Override
public void onStyleLoaded(@NonNull Style style) {
}
});