如何在谷歌地图中禁用两指滚动

2024-01-07

我正在尝试在我的应用程序中实现谷歌地图,其中我想在谷歌地图中禁用两根手指滚动。这意味着如果用户用一根手指触摸地图,则地图应该滚动,如果用户用两根手指触摸地图,则不应滚动。 谢谢!


您可以在 GoogleMap 上启用/禁用滚动手势,您可以通过调用setAllGesturesEnabled() and setScrollGesturesEnabled() on GoogleMap.getUiSettings()物体并用于确定两个手指的触摸MapFragment您可以使用基于自定义地图片段的方法this https://stackoverflow.com/a/14538765/6950238社区维基的回答:

public class TouchableWrapper extends FrameLayout {

    private GoogleMap mGoogleMap = null;

    public TouchableWrapper(Context context) {
        super(context);
    }

    public void setGoogleMap(GoogleMap googleMap) {
        mGoogleMap = googleMap;
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {

        switch (event.getAction() & MotionEvent.ACTION_MASK) {

            case MotionEvent.ACTION_DOWN:
                mGoogleMap.getUiSettings().setScrollGesturesEnabled(true);
            break;

            case MotionEvent.ACTION_POINTER_DOWN:
                // disabling scroll gestures in case second finger down
                mGoogleMap.getUiSettings().setScrollGesturesEnabled(false);
            break;

            case MotionEvent.ACTION_POINTER_UP:
                mGoogleMap.getUiSettings().setScrollGesturesEnabled(true);
            break;

            case MotionEvent.ACTION_UP:
                mGoogleMap.getUiSettings().setScrollGesturesEnabled(true);
            break;
        }

        return super.dispatchTouchEvent(event);
    }
}

MapFragment为此应该定制如下:

public class MultiTouchMapFragment extends MapFragment {
    public View mOriginalContentView;
    public TouchableWrapper mTouchView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
        mOriginalContentView = super.onCreateView(inflater, parent, savedInstanceState);
        mTouchView = new TouchableWrapper(getActivity());
        mTouchView.addView(mOriginalContentView);
        return mTouchView;
    }

    @Override
    public View getView() {
        return mOriginalContentView;
    }
}

activity_main.xml for MainActivity可以是这样的:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="{YOUR_PACKAGE_NAME}.MainActivity">

    <fragment
        android:id="@+id/map_fragment"
        android:name="{YOUR_PACKAGE_NAME}.MultiTouchMapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</RelativeLayout>

并且没有任何变化MainActivity:

public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {

    private GoogleMap mGoogleMap;
    private MultiTouchMapFragment mMapFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mMapFragment = (MultiTouchMapFragment) getFragmentManager()
                .findFragmentById(R.id.map_fragment);
        mMapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mGoogleMap = googleMap;
        mMapFragment.mTouchView.setGoogleMap(mGoogleMap);
    }

}

此外,您可以使用相同的解决方案进行定制MapView(如果你使用它)。

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

如何在谷歌地图中禁用两指滚动 的相关文章

随机推荐

  • 嵌套 Case 语句类型错误 (postgres)

    我创建的一些 postgres 代码给了我一个错误 ERROR CASE types character varying and numeric cannot be matched CODE CREATE TABLE current con
  • 尝试理解 gcc 在复制返回地址的 main 顶部的复杂堆栈对齐

    嗨 我已经反汇编了一些我编写的程序 linux 以更好地理解它是如何工作的 我注意到 main 函数总是以 lea ecx esp 0x4 I assume this is for getting the adress of the fir
  • 使用自定义框架时出现“Interface Builder 文件中的未知类 BarChartView”错误

    我正在尝试使用Charts framework在我的应用程序中 我已经使用 Carthage 为此构建了二进制文件 并将其添加到我的应用程序中 并包含两个文件 Charts Swift h Charts h 然后我将视图的自定义类设置为Ba
  • 如何在 Egit/TortoiseGit 中查看存储库的整个提交历史记录?

    我正在寻找一种方法来查看当前 git 存储库的整个历史 从表面上看 egit 的 Show in History 只会显示当前提交之前的提交 我的意思是 如果我执行 commit1 和 commit2 然后决定签出第一个 则运行项目的 在历
  • 关于UpdatePanel内部?

    假设我在页面上有很多重度控制 例如 我在页面上填充了三个网格视图 一个网格视图和按钮位于更新面板内 从这个场景我们可以理解页面上会有巨大的视图状态 所以我想知道 如果我单击更新面板内的按钮 那么所有视图状态都将在部分回发期间提交到服务器 如
  • 附加属性出现奇怪的 WPF 错误

    我看到奇怪的行为 我强烈感觉这是 net 工具链中的一个错误 重现步骤 创建 WPF 应用程序 在该解决方案中创建类库 在类库中定义一些公共类 可以为空 在 WPF 应用程序中定义一些带有附加属性的类 并将 Window 作为目标类 将其附
  • Picasso IllegalArgumentException 目标不得为 null

    我正在尝试在我的项目中使用毕加索库来设置图像 当我单击视图的图像时 我在毕加索执行中遇到错误 应用程序的Logcat java lang IllegalArgumentException Target must not be null at
  • vue 最奇怪的行为 - 注释代码正在运行

    我有一个 vue 项目 以 firestore 作为数据库 我曾经使用以下功能登录用户 loginUser if this email this password firebase auth signInWithEmailAndPasswo
  • 如何使用 Python 观察和监控新创建文件的 ftp 安装点

    我可以使用观看本地目录inotify基于内核子系统的解决方案 还有一些 python 项目也在 inotify 之上工作 例如pyinotify https github com seb m pyinotify pyInotify http
  • 对 __attribute__((format)) 的自定义支持

    GCC 和 Clang 都支持对变量参数函数进行编译时检查 例如printf 这些编译器接受如下语法 extern void dprintf int dlevel const char format attribute format pri
  • 应该 validate_format_of 。 not_with 在框架中有问题(或者在我的理解中)

    我将以下代码放入 RSpec 测试中 it should validate format of email not with test test 并设置实际的类 validates email presence gt true format
  • Python如何获取用zlib压缩的数据的长度?

    我有一个包含多个 zlib 压缩的二进制数据的文件 并且偏移量和长度未知 下面 我有一个脚本 用于获取最终 zlib 压缩数据之后的字节偏移量 这就是我所需要的 脚本有效 但是 为了获得原始 zlib 压缩数据的长度 我必须将其解压缩并重新
  • Ontotext GraphDB 如何在 Visual Graph 中分配颜色?

    我一直在尝试使用 Ontotext GraphDB 创建一些图形可视化 我希望我对相同数据制作的各种可视化效果之间的颜色保持一致 我知道颜色是根据类型而定的 但似乎并不一致 例如 如果我创建一个仅包含类型节点的可视化图表A 分配给节点的颜色
  • Jax rs 客户端池

    我正在努力使用 jax rs 2 客户端 API 设置 REST 客户端 在 api 文档中 它说 客户端是管理客户端通信基础设施的重量级对象 客户端实例的初始化和处置可能是一个相当昂贵的操作 因此建议仅构建少量客户端应用程序中的实例 ht
  • 无法加载文件或程序集 CrystalDecisions.ReportAppServer.CommLayer

    我有一个与此类似的错误one https stackoverflow com q 10001310 196526或这个one https stackoverflow com q 38025601 196526但我的问题不同 我在本地计算机上
  • 删除一个类的所有成员

    昨天我读了一位同事的一些代码 发现了这一点 class a class public a class int some method int some param int value 1 int value 2 float value 3
  • 暂时将powershell语言更改为英语?

    我编写了一些使用系统 powershell 命令输出的软件 但没有预见到对于英语以外的语言 输出会有所不同 有没有办法暂时将Powershell中的语言更改为英语就这一个 单个 powershell 会话 Notes 如果它很重要 我希望运
  • pandas - Groupby 两个函数

    我一直在尝试获取 pandas groupby 对象的 cumsum 我需要将 cumsum 移动 1 这是通过 shift 实现的 然而 在单个 groupby 对象上执行这两个函数会产生一些不需要的结果 df pd DataFrame
  • React 的 getDefaultProps() 中的 this.props ?

    我正在尝试添加一个依赖于其他道具的道具 这些道具基本上将由组件的所有者组件传递 所以我做了 propTypes user React PropTypes object comment React PropTypes object getDe
  • 如何在谷歌地图中禁用两指滚动

    我正在尝试在我的应用程序中实现谷歌地图 其中我想在谷歌地图中禁用两根手指滚动 这意味着如果用户用一根手指触摸地图 则地图应该滚动 如果用户用两根手指触摸地图 则不应滚动 谢谢 您可以在 GoogleMap 上启用 禁用滚动手势 您可以通过调