繁体   English   中英

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

[英]MapActivity Force Closes, Touch Event fires recklessly

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

更改return语句以返回true:

return true;

基本上,它的作用是它告诉系统你已经处理了touchevent。 如果能解决问题,请告诉我。

我相信你的代码中有很少的错误:

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

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

3-您将重复添加相同的itemizedOverlay到mapview。 在调用“LocationStuffs”方法10次后,您将为叠加列表添加10次相同的叠加层。 您应该在此方法之外仅添加一次Itemizedoverlay(例如onCreate或onResume)

祝好运

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM