我有一个有触摸事件的MapActivity。
在触摸事件中:
我获得了当前的地理编码
在该位置放置叠加图像。
并将其设置为mapview的中心。
这似乎工作正常并且正如预期的那样。但随后申请部队关闭。我认为触摸事件即使在没有被触摸的情况下也会像疯了一样被解雇。我知道,因为我已经设置了一个吐司设置,显示了触摸位置的经度和纬度。即使没有碰到任何东西,它也会不断出现。
我似乎无法准确定位问题,更不用说修复它了。这是我的mapActivity的触摸事件
private void LocationStuffs(double latitude, double longitude){
itemizedOverlay.clear();
itemizedOverlay.addOverlayItem((int)latitude, (int)longitude, "place");
mapView.invalidate();
mapView.getOverlays().add(itemizedOverlay);
MapController mc = mapView.getController();
mc.setCenter(new GeoPoint((int)latitude, (int)longitude));
mc.setZoom(20);
}
public boolean onTouchEvent(MotionEvent event, MapView mapView){
//---when user lifts his finger---
if (event.getAction() == 1) {
GeoPoint p = mapView.getProjection().fromPixels(
(int) event.getX(),
(int) event.getY());
Toast.makeText(getBaseContext(),
p.getLatitudeE6() / 1E6 + "," +
p.getLongitudeE6() /1E6 ,
Toast.LENGTH_SHORT).show();
latitude = p.getLatitudeE6() / 1E6;
longitude = p.getLongitudeE6() / 1E6;
LocationStuffs(latitude*1E6, longitude*1E6);
}
return false;
}
答案 0 :(得分:2)
将return语句更改为true:
return true;
基本上,它的作用是它告诉系统你已经处理了touchevent。如果能解决问题,请告诉我。
答案 1 :(得分:1)
我相信您的代码中没有错误:
1-在“onTouchEvent”方法中关闭“if”语句之前,需要“return true”语句。这告诉系统事件已被处理并且应该被消耗。这可能是多次触摸的原因。
2-“mapView.invalidate();”应该移动到“LocationStuffs”方法的末尾,因为您希望在添加新位置之后重新绘制屏幕,而不是之前。
3-您将重复添加相同的itemizedOverlay到mapview。在调用“LocationStuffs”方法10次后,您将为叠加列表添加10次相同的叠加层。您应该在此方法之外添加一次Itemizedoverlay(例如onCreate或onResume)
祝你好运