首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在使用MapBox加载地图前防止黑屏闪烁?

如何在使用MapBox加载地图前防止黑屏闪烁?
EN

Stack Overflow用户
提问于 2018-04-30 14:04:13
回答 2查看 1.4K关注 0票数 6

我在我的片段中加载Mapbox,该片段将在从DrawerLayout中单击时启动。

代码语言:javascript
运行
复制
  @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.map_fragment, container, false);


    }

  @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        bindUI(getView());        mapView = view.findViewById(R.id.mapView);

        mapView.onCreate(savedInstanceState);
        mapView.getMapAsync(map -> {
            mapboxMap = map;

            setUpMap();
        });

    }

 @Override
    public void onStart() {
        super.onStart();
        mapView.onStart();

    }

    @Override
    public void onStop() {
        super.onStop();
        mapView.onStop();

    }


    @Override
    public void onDestroy() {
        super.onDestroy();
        mapView.onDestroy();
    }

    @Override
    public void onResume() {
        super.onResume();
        mapView.onResume();
    }

    @Override
    public void onPause() {
        super.onPause();
        mapView.onPause();
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        mapView.onLowMemory();
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        mapView.onDestroy();

    }

    @Override
    public void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        mapView.onSaveInstanceState(outState);
    }

这是我在代码片段中使用Mapbox加载地图时使用的代码。每当我改变抽屉布局的片段时,一个黑屏闪烁,然后地图就被加载了。

如果我加载的是其他片段,而不是Map fragment,它可以很好地工作。

提前感谢

EN

回答 2

Stack Overflow用户

发布于 2020-07-03 06:30:25

这在本地是不可能的,但是你可以根据mapBox的文档做一个变通方法。

请参阅THIS DOC: Troubleshoot raster image with black background

为什么会出现黑色背景:显示的黑色背景是光栅图像中不包含任何数据的部分。通常,光栅图像是像素的矩形网格。当您处理不是矩形的数据时,网格中有一些像素不包含任何数据。这些像素表示为NoData值,表示缺少数据。上载到Mapbox Studio的GeoTIFF将显示为JPEG,以节省空间并快速加载地图。由于JPEG不能显示透明度,因此NoData值显示为黑色。

在Mapbox Studio中不能更改NoData值的外观,但有两种策略可以在Mapbox Studio之外解决该问题。首先,您可以使用JPEG JS来检索而不是。如果这不起作用,你可以使用Rasterio对原始图像进行编辑。

票数 0
EN

Stack Overflow用户

发布于 2018-05-08 23:37:09

你可以放置一个带有“地图正在加载...”的TextView。在Mapbox地图上并在onMapReady之后将其隐藏,例如:

代码语言:javascript
运行
复制
@Override
public void onMapReady(MapboxMap mapboxMap) {
    mapLoadingOverview.postDelayed(new Runnable() {
        public void run() {
            mapLoadingOverview.setVisibility(View.GONE);
        }
    }, 1000); 
}

xml

代码语言:javascript
运行
复制
<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white">

    <com.mapbox.mapboxsdk.maps.MapView
        android:id="@+id/mapboxMapView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        mapbox:mapbox_cameraTargetLat="53.873900"
        mapbox:mapbox_cameraTargetLng="10.683876"
        mapbox:mapbox_cameraZoom="15"
        mapbox:mapbox_styleUrl="@string/mapbox_style_light" />

    <TextView
        android:id="@+id/mapLoadingOverview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/subwhite"
        android:text="@string/mapOverlayText"
        android:gravity="center"
        android:textColor="@color/maincolor"
        android:textSize="@dimen/mapOverlayTextSize"
        android:visibility="visible" />
</FrameLayout>
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50094790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档