Android v2 MapFragment 在 Scrollview 中滚动时抖动

2023-12-07

我正在使用 SupportMapFragment 在 ScrollView 中显示静态地图。我不喜欢移动/缩放地图,只显示位置。

当我向下/向上滚动时,地图在其边界内晃动,感觉非常滞后。我的问题是,如何消除这种滞后,或者如何使用 v2 api 映射的静态版本。

这是我的布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="@dimen/margin_half"
    android:background="@color/white"
    android:orientation="vertical" >

  ...

    <fragment
        android:id="@+id/fragmentMap"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:layout_alignParentLeft="true"
        android:layout_below="@id/viewDivider"
        android:layout_margin="@dimen/margin_half"

         />

    <View
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:layout_alignBottom="@id/fragmentMap"
        android:layout_alignLeft="@id/fragmentMap"
        android:layout_alignRight="@id/fragmentMap"
        android:layout_alignTop="@id/fragmentMap"
        android:background="@android:color/transparent" />

   ...

</RelativeLayout>

这实际上与ScrollView 中的 MapFragment,尽管我使用这个技巧来删除旧设备上的黑色剪辑,正如您在透明视图中看到的那样。

我还禁用了所有手势和地图视图的可点击性:

getMap().getUiSettings().setAllGesturesEnabled(false);
getMap().getUiSettings().setZoomControlsEnabled(false);
getMap().getUiSettings().setMyLocationButtonEnabled(false);

...
mapView.setClickable(false);
mapView.setFocusable(false);
mapView.setDuplicateParentStateEnabled(false);

随着新版本 Google Play 服务的推出,Google 添加了snapshot方法以检索当前显示的地图的位图,而该地图可能会被显示。所以交互是不可能的,但至少地图不再晃动了。

use

GoogleMap.snapshot (GoogleMap.SnapshotReadyCallback callback)

并实现 SnapshotReadyCallback。交付快照后,将 MapFragment 替换为包含快照的 ImageView。

这个例子在 onResume 方法中运行得很好:

@Override
    public void onResume() {
        super.onResume();
        notifyDataChanged();
        final ViewTreeObserver viewTreeObserver = fragmentMap.getView()
                .getViewTreeObserver();

        if (viewTreeObserver.isAlive()) {
            viewTreeObserver
                    .addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

                        @Override
                        public void onGlobalLayout() {
                            onMesuredMap(this);
                        }
                    });
        }

    }

    private void onMesuredMap(OnGlobalLayoutListener listener) {
        if (fragmentMap.getView().getWidth() != 0
                && fragmentMap.getView().getHeight() != 0) {

            fragmentMap.getView().getViewTreeObserver()
                    .removeOnGlobalLayoutListener(listener);

            makeSnapShot();
        }
    }

        private void makeSnapShot() {
    Runnable action = new Runnable() {
        @Override
        public void run() {

            fragmentMap.getMap().snapshot(new SnapshotReadyCallback() {

                @Override
                public void onSnapshotReady(Bitmap arg0) {
                    imageViewStaticMap.setImageBitmap(arg0);
                    removeMapFragment();
                }

            });
        }
    };
            //litle hack to make sure that the map is loaded for sure
    fragmentMap.getView().postDelayed(action, 1500);
}

    private void removeMapFragment() {
        if (fragmentMap.isVisible()) {
            getChildFragmentManager()
                    .beginTransaction()
                    .remove(fragmentMap)
                    .commit();
        }
    }

边注:要使用新版本,请运行 Android SDK Manager 的更新,并在使用 maven 时运行maven-android-sdk-部署器 with:

mvn install -fae
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android v2 MapFragment 在 Scrollview 中滚动时抖动 的相关文章

随机推荐

  • cin 还是 printf?

    在使用 c c 工作时 1 cin cout 或者 2 scanf printf 两者中哪一个的执行或运行时间会更少 或者两者都有相同的运行时间 我的目标是减少代码的运行时间 投注相对时间控制台IO功能是恕我直言 没有任何实际用途 这是完全
  • 在单个服务器上单独的 Git 部署

    我希望我的应用程序中有一个功能 允许用户在版本之间进行更改 特别是查看冲刺之间应用程序的差异 用户只需从下拉列表中选择一个版本 Sprint A Sprint B 等 页面就会刷新 显示当时应用程序的状态 这本身应该不是什么太大的问题 我认
  • 强大的哈希字符串函数并恢复它

    我正在寻找一个强大的哈希函数 算法 来对我的代码进行哈希处理 我想将散列字符串恢复为原始字符串 我可以恢复sha到原来的 你能帮助我吗 您无法从哈希恢复原始数据 因为它在设计上是不可逆的 通常的解释是鸽巢原理 大多数哈希值约为 128 25
  • 创建框架时 Xcode 8 中未找到 filename.h 文件错误

    我正在尝试使用以下步骤创建一个框架https www raywenderlich com 65964 create a framework for ios 我已将框架文件导入到项目中 我可以为框架文件创建对象并访问方法 但是当我构建项目时
  • Android - WebView 不播放 YouTube 视频

    我有一些 WebView 代码 我试图用它在 YouTube 频道上播放 YouTube 视频 但它所做的只是在视频上显示旋转图标 而从未真正启动视频 有人知道如何解决这个问题吗 public class YoutubeActivity e
  • PHP 回发 url 谷歌钱包 IAP

    我的谷歌钱包应用内支付的回发 php 如下所示
  • 使用数组参数调用本机函数

    我完全不知道如何使用数组参数调用本机 dll 中的函数 Example 该函数在 C 项目中定义为 DllImport Project2 dll SetLastError true CallingConvention CallingConv
  • 如何将对象注入 Ninject 模块

    我正在使用 Ninject 进行 DI 我有 Ninject 模块 它将一些服务绑定到内核 并使用其他模块中的绑定对象作为服务 为了弄清楚这种情况 让我们看几行代码 这是我的安全模块 它提供了一个名为PermissionManagerCon
  • 使用 NHibernate QueryOver 实现“不存在的地方”

    使用新的QueryOverNHibernate 中的 API 我需要做一些相当于 select c from Category c where not exists select from CategoryProduct cp where
  • 在 VS2010 中将 version=10.0.0.0 替换为 11.0.0.0 进行更改后出现新的构建错误

    我遇到了同样的问题构建错误 创建 Excel 2010 的 VSTO 插件 根据解决方案进行更改后 我得到了新的错误 The InitializeDefaultProperties task could not be loaded from
  • XmlSerializer 保存临时文件的最安全位置

    我注意到 XmlSerializer 需要使用磁盘空间来执行其命令 如果没有可写的 temp 文件夹 则会失败并出现如下错误 Source System Xml Message Unable to generate a temporary
  • Task.Run(async () => wait MethodAsync()).Result 和 MethodAsync().Result 之间有什么区别吗? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我需要实现一个不支持异步的第三方接口 特别是来自 automapper 的 IValueResolver 我想知道这两段代码有什么区别 使用第一个而不是第二个有什么优点吗 我将在
  • 在 Spring Boot 中每个数据库连接开始时运行 SQL 语句

    如何使用Spring Boot获得数据库连接后直接运行自定义SQL语句 每次建立新连接时都需要运行 SQL 该解决方案应该与 Spring Boot 默认 DataSource 实现 我认为是 Tomcat 池数据源 一起使用 声明是什么并
  • 什么是互递归类型?

    如果在 ML 中 递归数据类型的示例是 datatype llist Nil Node of int llist 什么是机器学习中的相互递归数据类型以及它的示例是什么 这些愚蠢的数据类型就是这样的一个例子 datatype a A Ab o
  • FirebaseInstanceId:传递消息时出错:MI 设备中未找到 ServiceIntent

    当应用程序长时间处于后台时 我们发现了此错误 我在小米设备中发现了这个问题 我在三星进行了测试 它运行完美 但在小米中 它总是抛出相同的错误 None
  • findOne 可以先匹配还是最后匹配?

    我专门使用猫鼬 尽管我不认为这有那么重要 例如 假设我有一个名为 MongoQueue 的集合 并且我向该队列添加了一些人 MongoQueue save function err firstPerson if err console lo
  • 使用不同的因变量重复回归

    我已经在 Stack 和 google 上搜索了解决方案 但没有找到解决我的问题的方法 我有大约 40 个因变量 我的目标是获得调整后的均值 lsmeans 在考虑了一些协变量后 我需要调整 A 组和 B 组的均值 我的最终对象应该是一个数
  • 在 matplotlib 中使用更多颜色进行绘图

    我正在尝试使用 matplotlib 绘制散点图 但收到 IndexError 从空列表中弹出 错误 我不知道如何修复它 import matplotlib pyplot as plt import matplotlib import nu
  • 表格单元格在行内右对齐

    我试图弄清楚如何将单元格移动到 HTML 表格的左侧 我想在最后一行使用更少的单元格 默认情况下它位于右侧 例如我有这张表 table tr th one th th two th th three th tr tr td one td t
  • Android v2 MapFragment 在 Scrollview 中滚动时抖动

    我正在使用 SupportMapFragment 在 ScrollView 中显示静态地图 我不喜欢移动 缩放地图 只显示位置 当我向下 向上滚动时 地图在其边界内晃动 感觉非常滞后 我的问题是 如何消除这种滞后 或者如何使用 v2 api