我在做的程序的时候,遇到这样的一个问题,就是,双击mapView响应事件,后来试了很多方法,后来终于成功了!
这是我从网上搜集的一些资料。如下:
touch与多个mapview 的属性及返回值的总结
序号 | setClickable | setEnabled | onTouch函数 返回值 | 结果 |
1 | 默认 | 默认 | false | 仅响应第一次,mapview正常响应 |
2 | 默认 | 默认 | true | 每次都响应,mapview不能正常响应 |
3 | true | true | false | 仅响应第一次,mapview正常响应 |
4 | true | true | true | 每次都响应,mapview不能正常响应 |
根据以上调查结果得出结论
onTouch函数的返回值直接影响着onTouch函数响应情况,mapview和onTouch函数响应互斥,与setClickable setEnabled无关
决定使用dispatchTouchEvent函数,下面是我重写的dispatchTouch方法,主要功能是,双击mapView能自动放大地图。以供大家参考!
首先这个实例只能用在4.0以上版本
你想点击任意一点获得坐标不能用onTouchEvent,而只能用dispatchTouchEvent 因为“MapActivity 继承了 the dispatchTouch Event 而不是OnTouchEvent ”
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
int actionType=ev.getAction();
switch(actionType){
case MotionEvent.ACTION_DOWN:
count++;
if(count==1){
firClick=System.currentTimeMillis();
}else if(count==2){
//Toast.makeText(ActivityMain.this, "aaa", Toast.LENGTH_SHORT).show();
secClick=System.currentTimeMillis();
System.out.println("sec:"+secClick);
System.out.println("first:"+firClick);
distanceTime=secClick-firClick;
System.out.println("distanceTime:"+distanceTime);
if(distanceTime>1 && distanceTime<1000){
Toast.makeText(ActivityMain.this, "aaa", Toast.LENGTH_SHORT).show();
intZoomLevel++;
if (intZoomLevel > mMapView01.getMaxZoomLevel()) {
intZoomLevel = mMapView01.getMaxZoomLevel();
}
mMapController01.setZoom(intZoomLevel);
}
firClick=0;
secClick=0;
count=0;
}
}
return super.dispatchTouchEvent(ev);
}