腾讯地图SDK 手势失效或冲突的解决办法

前言

由于高德地图sdk开始涨价割韭菜了,因此,我司在降本增效的大背景下,需要把高德地图换成腾讯地图。
在更换sdk过程中,踩了一些关于地图手势事件的坑,这里记录下,希望能给遇到同样问题的大佬们一个思路。

拖动地图失效,地图无响应

由于用到地图的页面是RN的,因此,native这边主要是提供一个地图控件,实现RN所需的对应api。
我这边是直接继承自 TextureMapView 实现了一个自定义的 MapView,然后把自定义的MapView 暴露出去给RN使用。然后就是把之前用高德的api换成腾讯的api同步实现即可。

按照这个思路写完代码后,测试地图可以正常显示,心想,这不是信手拈来,美滋滋。

在这里插入图片描述

于是顺手划了下地图,发现地图一动不动,就像是触摸事件失效了一样。
没错,悲伤总是来的那么快。
在这里插入图片描述

高德地图就没问题啊,同样的代码这是换成了腾讯地图,怎么就不响应手势了呢?

一开始以为是自己哪里配置的有问题,于是去扒了下官方文档,没发现有什么问题啊。

回过头来想了一下,是不是事件被子view拦截并消费掉了,导致当前这个mapview拿不到事件?于是,直接重写 onInterceptTouchEvent 默认返回true,强制让当前 View 拦截所有的触摸事件。

    override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean {return true}

再次运行,地图可以响应拖动以及点击事件了。

嗯,so easy!

随后换了个页面测试,又发现地图似乎拖动起来很困难,还有事件冲突,因为这个页面整体是一个可滚动的View,内部的顶上嵌套了一个MapView,这就导致了我明明移动的是地图,结果整个页面都跟着向上滑动了,而不是预期的mapView内部本身进行滑动。
这不就是典型的事件被父view给拦截处理导致事件冲突了吗?
在翻阅腾讯地图的文档时发现 TencentMapOptions 有个配置可以设置父视图不要拦截事件。

在这里插入图片描述
于是,按照文档加了配置。

        TencentMapOptions().apply {setDisallowInterceptTouchEvent(false)//允许拦截触摸事件}

再次运行测试发现,毛用没有!

这…
没办法,直接扒源码打断点看下啥情况了,直接看他内部事件分发的处理逻辑,如下
在这里插入图片描述

在断点时发现,super.dispatchTouchEvent(ev) 的返回值是 true,也就是说根本就走不到里面 mMapDelegate.onTouchEvent(ev) 的逻辑,怪不得之前地图不响应手势了。

找到问题就简单了,把之前onInterceptTouchEvent 的代码干掉,直接重写 dispatchTouchEvent ,然后直接返回mMapDelegate.onTouchEvent(ev)mMapDelegate 去处理事件即可。

    override fun dispatchTouchEvent(ev: MotionEvent): Boolean {Logger.it(TAG, "dispatchTouchEvent:${ev}")return mMapDelegate.onTouchEvent(ev)}

再次运行测试,好了…

本篇文章就是这样,希望给遇到同样问题的大佬们一点思路吧,希望能够帮助到大家。


感谢阅读,如果对你有帮助请三连(点赞、收藏、加关注)支持。有任何疑问或建议,欢迎在评论区留言讨论。如需转载,请注明出处:喻志强的博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/455532.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

21、基于Firefly-rk3399字符设备驱动寄存器控制LED

文章目录 一、电路分析引脚配置功能(R/W register) 二、RK3399数据手册分析:1、GPIO(General-purpose input/output)介绍:2、CRU(Clock & Reset Unit)介绍查找GPIO相关内容: 3、PMU(Power Management Uni)4、GRF(General Regi…

git 报错 SSL certificate problem: certificate has expired

git小乌龟 报错 SSL certificate problem: certificate has expired 场景复现: 原因: 这个错误表明你在使用Git时尝试通过HTTPS进行通信,但是SSL证书已经过期。这通常发生在使用自签名证书或证书有效期已到期的情况下。 解决方法: 1.如果是…

WTN6 E 系列语音芯片 单线时序及示例代码

1. 概述: WTN6 系列为多功能,低功耗,高性能的 CMOS 语音芯片。现有 WTN6020E、WTN6040E、 WTN6080E、WTN6170E 四种芯片(语音长度分别为 20s、40s、80s、170s),已投入市场。 音频采样率目前最高可达 32kHz&#xff0…

streamlit 实现 flink SQL运行界面

实现效果 streamlit flink-playground.py 文件如下: import streamlit as st import io import contextlib import sys import os import uuid import subprocess from jinja2 import Templatest.set_page_config(layout"wide")# 设置页面标题 st.title…

SL3160 dcdc150V降压5.1V/1A 车载GPS定位器供电芯片

一、主要特性 宽输入电压范围:SL3160支持10~150V的宽输入电压范围,使其能够适应各种电源电压波动,确保稳定输出。 高效降压转换:该芯片采用先进的电源管理技术,转换效率高达90%以上,降低了散热压力和整体…

点云标注工具开发记录(五)之点云文件加载、视角转换

在Open3D中,通过read方法,我们可以读取不同格式的点云数据,那么,在不使用Open3D的相关接口时,我们就需要自己重写文件读入、加载、渲染展示方法,效果如下: 点云文件读入 首先,我们要…

vue开发的一个小插件vue.js devtools

可打开谷歌商城的情况下,不可打开的可以到极简插件里面去下载 极简插件官网_Chrome插件下载_Chrome浏览器应用商店 搜索vue即可

Flutter仿京东商城APP实战 用户中心基础布局

用户中心界面 pages/tabs/user/user.dart import package:flutter/material.dart; import package:jdshop/utils/zdp_screen.dart; import package:provider/provider.dart;import ../../../store/counter_store.dart;class UserPage extends StatefulWidget {const UserPage…

Maven入门到实践:从安装到项目构建与IDEA集成

目录 1. Maven的概念 1.1 什么是Maven 1.2 什么是依赖管理 1.3 什么是项目构建 1.4 Maven的应用场景 1.5 为什么使用Maven 1.6 Maven模型 2.初识Maven 2.1 Maven安装 2.1.1 安装准备 2.1.2 Maven安装目录分析 2.1.3 Maven的环境变量 2.2 Maven的第一个项目 2.2.1…

古埃及象形文字在线字典

我在个人网站“小孔的埃及学站点”上推出了在线的象形文字字典,总共收罗了将近700条的象形文字(词)。在线字典的使用方法很简单,在网站各大版块首页的右上方会有如下图所示的查询入口。 点击文本框,输入中文或英文关键…

公交IC卡收单管理系统 assets 信息泄露

0x01 产品描述: 公交IC卡系统是公交一卡通系统核心建设部分,是高时尚、高科技的管理系统,大大提升了公交行业的服务,能让公交企业信息化和电子化打下一个良好的硬件基础和软件基0x02 漏洞描述: 公交IC卡系统在/assets/…

FRIDA-JSAPI:Instruction使用

官方API文档介绍 Instruction.parse(target) 解析内存中 target 地址处的指令。 返回的对象具有的字段: address: 此指令的地址(EIP),类型为 NativePointernext: 指向下一条指令的指针,您可以使用 parse() 解析它size…

详解如何使用WGCLOUD监测日志文件

WGCLOUD可以监控日志文件,包括.log、.txt、.out等类型的文件 WGCLOUD既可以监测文件夹下按天生成的日志文件,也可以监控指定的日志文件,非常灵活 我们只需要设置好日志中出现什么关键字符,那么WGCLOUD就可以自动进行这些监控工作…

【react 和 vue】 ---- 实现组件的递归渲染

1. 需求场景 今天遇到了一个需求,就是 HTML 的递归渲染。问题就是商品的可用时间,使用规则等数据是后端配置,然后配置规则则是可以无限递归的往下配置,可以存在很多级。后端实现后,数据返回前端,就需要前端…

一招教你解决Facebook广告账号问题

这段时间,我们写了很多文章来探讨Facebook的广告账户问题:《Facebook被封号该怎么办》《Facebook二不限、三不限账号是什么》《Facebook海外户(三不限)和账单户该如何选择》《如何区分真假Facebook三不限海外户》相信看过这些文章…

【传知代码】智能推荐与隐私保护的融合(论文复现)

本文将深入探讨这样一种系统的设计理念、关键技术以及其在实际应用中的潜力和优势。通过探索如何在保证个性化推荐效果的同时,有效保护用户隐私,我们将揭示出一种新兴的技术趋势,为未来智能化应用的发展开辟新的可能性。 目录 概述 项目设计…

基于SSM+小程序的就业管理系统(就业1)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 学生实习与就业管理系统的设计与实现管理员、辅导员管理、企业管理、工作管理人、用户管理5个角色。 1、管理员实现了基础数据管理、辅导员管理、企业管理、工作管理人管理、公告信息管理…

js 填充数组

let arr Array.from({ length: 10 }, (_, index) > index)console.log(arr) 人工智能学习网站 https://chat.xutongbao.top

如何用示波器检测次级点火系统(一)

写在最前面: 单看标题可能会让你觉得这篇文章的主题是关于检测线圈,火花塞和火花塞插头电线。但我们指的是分析燃烧室内电子的行为。目标是看燃料混合物,阀座,压缩,积碳和其它影响这种特性的症状。最终目的是要学会分…

FIR数字滤波器在MATLAB中的实现

摘要 数字滤波器是由数字乘法器、加法器和延时单元组成的一种装置。数字滤波器的功能是对输入离散信号的数字代码进行运算处理,以达到改变信号频谱的目的。近年来数字滤波在通信、图像编码、语言编码、雷达等许多领域中有着十分广泛的应用。 本文首先介绍了数字滤波…