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

trueを返すようにreturnステートメントを変更します。

return true;

基本的に、それはあなたがタッチイベントを処理したことをシステムに伝えることです。それで解決するかどうか教えてください。

于 2012-09-27T20:52:39.383 に答える
1

コードにエラーはほとんどないと思います。

1-「onTouchEvent」メソッドの「if」ステートメントを閉じる前に、「returntrue」ステートメントが必要です。これは、イベントが処理され、消費される必要があることをシステムに通知します。それがおそらく複数のタッチの理由です。

2-「mapView.invalidate();」新しい場所を追加した後ではなく、画面を再描画する必要があるため、「LocationStuffs」メソッドの最後に移動する必要があります。

3-同じitemizedOverlayをマップビューに繰り返し追加しています。「LocationStuffs」メソッドを10回呼び出すと、同じオーバーレイがオーバーレイリストに10回追加されます。Itemizedoverlayは、このメソッドの外部(onCreateやonResumeなど)で1回だけ追加する必要があります。

幸運を

于 2012-09-27T22:54:27.440 に答える