【问题标题】:Create screenshot of Osmdroid Mapview创建 Osmdroid Mapview 的截图
【发布时间】:2017-10-11 17:57:21
【问题描述】:

我想创建一个 Osmdroid MapView (mymapView) 的屏幕截图。我正在这样做:

Bitmap bitmap=mymapView.getDrawingCache().copy(Bitmap.Config.RGB_565, true);

我收到此错误:

java.lang.NullPointerException:尝试调用虚拟方法 'android.graphics.Bitmap android.graphics.Bitmap.copy(android.graphics.Bitmap$Config, boolean)' 在空对象引用上

我认为原因是当我尝试创建位图时 MapView 还没有准备好。我想我将不得不为 Osmdroid 使用 GoogleMap.SnapshotReadyCallback 的等价物。 Osmdroid 是否有这样的类,或者其他方法可以创建 Mapview 的屏幕截图?

【问题讨论】:

    标签: android bitmap screenshot osmdroid


    【解决方案1】:

    在 Osmdroid 6.1.0 中引入了类似的功能。对应的类是MapSnapshot。
    可以在这里找到一个示例用法:SampleMapSnapshot

    一个简单的用法如下所示,这里 pMapView 是我们要快照的 Mapview。

    final MapSnapshot mapSnapshot = new MapSnapshot(new MapSnapshot.MapSnapshotable() {
                @Override
                public void callback(final MapSnapshot pMapSnapshot) {
                    if (pMapSnapshot.getStatus() != MapSnapshot.Status.CANVAS_OK) {
                        return;
                    }
                    final Bitmap bitmap = Bitmap.createBitmap(pMapSnapshot.getBitmap());
                    // Do something with the bitmap like save to file
                }
            }, MapSnapshot.INCLUDE_FLAG_UPTODATE, pMapView);
    new Thread(mapSnapshot).start();
    

    注意:由于某种原因,如果您在 onCreate 期间直接调用它,则会导致崩溃。否则它会按预期工作

    参考:https://github.com/osmdroid/osmdroid/issues/1737

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多