今天在只有MapView的MapActivity页面使用View.OnTouchListener()遇到个问题,就是在模拟器中点击鼠标没有反应。
经过一段时间的琢磨才发现问题所在,
因为在程序中使用了map.setBuiltInZoomControls(true);
语句添加缩放图标(这里需要说明1.5之前的版本不是这样所的,之前的方法已经过期,但是下面我们要说到)
这里说一下原因
我们先来看一下鼠标按键所引起的时间顺序
当鼠标键按下时(即触摸)
首先触发dispatchTouchEvent
然后触发onUserInteraction
再次onTouchEvent
如果是点击的话,紧跟着下列事件(点击分俩步,ACTION_DOWN,ACTION_up)
触发dispatchTouchEvent
再次onTouchEvent
当ACTION_up事件时不会触发onUserInteraction(可查看源代码)
所以这时候你在页面继承OnDispathTouchEvent输出测试信息,会发现不仅仅OnTouch的事件不被触发,而且缩放的图标也无响应。再返过头来你会发现不论点击那里都是会引起缩放图标的显示。本来可以不引入缩放标志,但是从界面上来讲google自带的缩放标志比自己做的button美观也方便,但是这里原因其实很明显了,缩放图标的事件肯定阻止住了OnTouch事件,这里我想到解决办法是利用过期的API中的map.getZoomControls()方法
public class ShowState extends MapActivity{
private static final String TAG = "ShowTrack";
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.showstate);
findViews();
setupMap();
}
private MapView map;
private MapController mc;
private ViewGroup zoom;
/**
* find the mapView and controller
*
* @return
*/
private void findViews(){
Log.d(TAG, "find Views");
map=(MapView)findViewById(R.id.map);
mc=map.getController();
zoom=(ViewGroup)findViewById(R.id.zoom);
zoom.addView(map.getZoomControls());
}
/**
* set the view of map
*
* @return
*/
private void setupMap(){
GeoPoint stationTest=new GeoPoint((int)(25.047192*1000000) ,(int)(121.516981*1000000));
map.setStreetView(true);
// map.setBuiltInZoomControls(true);
mc.setZoom(18);
mc.animateTo(stationTest);
mc.setCenter(stationTest);
map.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
if(event.getAction()==MotionEvent.ACTION_DOWN){
Log.d(TAG, "get the touch "+event.getRawX()+" "+event.getRawY());
}
return false;
}
});
}
}
xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<view android:id="@+id/map"
class="com.google.android.maps.MapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:apiKey="*****"
android:clickable="true"
/>
<LinearLayout
android:id="@+id/zoom"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
/>
</RelativeLayout>
这样很好的实现了需要的功能,可以实现在map里获取触摸点并且显示出缩放按钮,而且在点击缩放按钮的时候不会触发捕捉的事件。
我想这是很有用处的,map里面的OnTouch存在的这个问题会影响到我们的使用。还有OnTouchListener必须用map调用,在类里重写方法也会被阻塞。虽然很好的解决了,但是用了过期的API,希望有更好的解决办法!
分享到:
相关推荐
最后,当`WebView`中存在输入框时,可能会与`WebView`上方的`EditText`产生焦点冲突。为了解决这个问题,我们可以为`WebView`设置`OnTouchListener`,并在触摸事件中请求焦点: ```java web_content....
部分源代码: MyMap = (MapView) findViewById(R.... mZoom = (ZoomControls) MyMap.getZoomControls(); linearlayout = (LinearLayout) findViewById(R.id.zoomview); linearlayout.addView(mZoom);
基于STM8单片机的编程实例,可供参考学习使用,希望对你有所帮助
Matlab遗传优化算法等算法 求解 生鲜配送问题 路径优化 时间窗 新鲜度 损成本 等约束 程序+算法+参考文献
计算机组成原理课程设计任务书 2021-3-1修订版1
单向辐射ugr模型 包含单向辐射电场模,上下表面辐射损耗,能带,q因字。
光伏锂电池储能功率协调控制系统仿真 [1]左侧光伏Boost控制部分:采用扰动观察法来进行MPPT最大功率跟踪,其中可以改变光照和温度模拟环境工况阶跃: [2]锂电池双向Buck_Boost:采用双闭环控制策略,给定负载电压外环,电流内环,通过稳定负载电压从而控制电流进行充放电 [3]负载电压能够稳定在设定值48V,锂离子电池对功率进行功率协调补偿 仿真运行工况模式: (1)当外界光照变弱,光伏输出功率不能满足负载所需功率,储能会放电进行补偿功率 (2)当外界光照变强,光伏输出功率超过负载所需功率,多余的功率储能会充电进行储存
激光熔覆数值模拟 COMSOL仿真 双椭球热源 采用双椭球热源模型,考虑材料热物性参数、相变、马兰戈尼效应、布辛涅斯克近似等,动网格模拟熔覆层,计算瞬态温度场和流场。
multisim学习Multisim2001电路设计及仿真入门与应用附带光盘含大量实例提取方式是百度网盘分享地址
HFI高频注入仿真 直接转矩控制,滑模观测器MATLAB仿真模型
拿来就用的张定友标定法实验报告,特别详细和完整 一、实验目的 3 二、实验器材 3 三、 张正友标定法原理 3 四、实验步骤 4 4.1 整体流程 4 4.2图像采集 4 4.3特征点提取 5 4.4相机标定 5 4.5畸变校正 6 五、 实验结果 6 5.1 内参矩阵K 6 5.2 畸变系数D 7 5.3 外参矩阵 和 7 5.4 标定误差的计算 8 六、实验结论 9 6.1标定结果的准确性与图像数量密切相关 9 6.2标定图像的分布与角度多样性对标定结果的影响 9 6.3重投影误差的评估 9 6.4畸变系数的准确性 9 6.5OpenCV 工具的使用简便性: 9 七、参考文献 10 八、附件 11
内容概要:本篇文章基于 Flask 框架讲解了一个具体的 API 接口实现方法,该接口用于触发特定ID关联的应用程序运行流程(利用Docker容器执行指定的应用Python脚本)。具体地,在接收 POST 请求之后,根据提供的应用ID来检索对应应用程序的相关路径、镜像名称与主脚本的位置等信息,并且尝试将应用程序目录及其相关联的数据目录挂载进一个临时创建出来的docker环境内以运行主要入口脚本,整个执行过程限定在一小时内完成。一旦成功则把结果以 JSON 包的形式发送回客户端,若是出现错误情况,如找不到对应的 App 或者在执行时发生异常或是超出了时限都将给予相应的JSON报错回复。 适用人群:有一定网络编程以及 Flask 框架使用基础的人群,特别是有志于深入研究 Python 网络服务器构建,掌握如何集成外部组件或容器化应用程序来提升业务处理能力的学生或者是工程师。 使用场景及目标:为用户提供一种简易但实用的方式让 Flask Web 应用可以异步地调用位于远端或本地机器上的 Docker 容器内的脚本来开展某些任务,如进行长时间的数据处理作业或是调用第三方工具等。
HFI高频方波注入方案stm32f405 无感FOC控制 直接闭环启动 永磁同步电机无感控制,0速带载启动,堵转保持扭矩 低速HFI, 高速SMO,全速域运行。 基于stm32f405。 高频注入零速启动三步走: 1 .先是高频注入,角度估算收敛。 2.脉冲NS磁极辨识。 3 .角度,速度双闭坏零速启动运行。 包括完整的cubemx配置文件,mdk工程,原理图和开发笔记,初始角度检测仿真,代码全C语言,宏定义选项均有中文注释,方便我植到自己的项目中。 内涵升级版hfi程序和新的foc程序框架,新版hfi程序速度波动更小。
数据来源:基于上市公司公告、年报等相关数据整理计算 数据范围:沪深京上市公司A股,包括主板、中小企业板、创业板、科创板、北京证交所服务板块等 数据详情: https://blog.csdn.net/yushibing717/article/details/144893810 包含六大类数据: 1、上市公司研究报告发布机构关联表20010101-20240929: ReportID [研究报告编码] - 自动生成的一组序列 Title [标题] - 研究报告的标题 DeclareDate [发布日期] - 研报对外发布日期 InstitutionName [发布机构名称] - 如果一个研报对应多个发布机构,分多条录入 2、上市公司研究报告分类关联表20010101-20240929: 3、上市公司研究报告基本信息20010101-20240929 4、上市公司研究报告人员关联表20010101-20240929 5、上市公司研究报告行业关联表20060703-20240929 上市公司研究报告证券关联表20010101-20240929.......
基于STM8单片机的编程实例,可供参考学习使用,希望对你有所帮助
基于STM8单片机的编程实例,可供参考学习使用,希望对你有所帮助
GEC6818 人脸检测
基于STM8单片机的编程实例,可供参考学习使用,希望对你有所帮助