MapActivity Force关闭,触摸事件肆无忌惮地发射

时间:2012-09-27 18:35:02

标签: java android google-maps android-mapview ontouchevent

我有一个有触摸事件的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;
    }

2 个答案:

答案 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)

祝你好运