0

我有一个具有触摸事件的 MapActivity。

在触摸事件中:

  • 我得到了当前的地理编码

  • 在该位置放置叠加图像。

  • 并将其设置为地图视图的中心。

这似乎工作正常,并且在一段时间内符合预期。但随后应用力关闭。我认为即使没有任何东西被触摸,触摸事件也会像疯了一样被触发。我知道这一点,因为我已经设置了一个显示触摸位置的经度和纬度的吐司。即使没有触摸它也会不断出现。

我似乎无法准确定位问题,更不用说修复它了。这是我的 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;
    }
4

2 回答 2

1

更改您的 return 语句以返回 true:

return true;

基本上,它的作用是告诉系统您已经处理了触摸事件。让我知道这是否解决了它。

于 2012-09-27T20:52:39.383 回答
1

我相信您的代码中几乎没有错误:

1-在关闭“onTouchEvent”方法中的“if”语句之前,您需要一个“return true”语句。这告诉系统该事件已被处理并且应该被使用。这可能是多次触摸的原因。

2-“mapView.invalidate();” 应该移到“LocationStuffs”方法的末尾,因为您希望在添加新位置之后而不是之前重绘屏幕。

3-您正在向地图视图重复添加相同的 itemizedOverlay。在调用您的“LocationStuffs”方法 10 次后,您将在叠加列表中添加 10 次相同的叠加。您应该只在此方法之外添加 Itemizedoverlay 一次(例如在 onCreate 或 onResume 上)

祝你好运

于 2012-09-27T22:54:27.440 回答