2009-11-20 19 views

Antwort

3

Verwenden Sie eine MapActivity? Hier ist der Code, den ich verwendet habe:

MapView mapView = (MapView)findViewById(R.id.map); 
Projection projection = mapView.getProjection(); 
int y = mapView.getHeight()/2; 
int x = mapView.getWidth()/2; 

GeoPoint geoPoint = projection.fromPixels(x, y); 
double centerLatitude = (double)geoPoint.getLatitudeE6()/(double)1E6; 
double centerLongitude = (double)geoPoint.getLongitudeE6()/(double)1E6; 

Sie müssen Code hinzufügen ähnlich wie dies auch:

@Override 
public boolean dispatchTouchEvent(MotionEvent event) 
{ 
    boolean result = super.dispatchTouchEvent(event); 
    if (event.getAction() == MotionEvent.ACTION_UP) 
     reload_map_data(); /// call the first block of code here 
    return result; 
} 
+0

dies die „fling“ Does Griff, wo die Karte bewegt ein kleines Stück hält, wenn Sie es schleudern (nachdem Sie den Finger heben) –

+0

Hallo danke für die Antwort marcc, aber Ich muss einen Weg finden, um zu erkennen, wann die Pan-Animation aufhört Ich kann Ihren zentralen Berechnungscode zu diesem Zeitpunkt verwenden. – vamsibm

12

Ich habe auch bereits die Suche nach einer „tat Ende drag“ Lösung, die die Karte erkennt genau im Moment, nachdem die Karte beendet wurde. Ich fand es nicht, also habe ich diese einfache Implementierung gemacht, die feine funktionierte:

private class MyMapView extends MapView { 

    private GeoPoint lastMapCenter; 
    private boolean isTouchEnded; 
    private boolean isFirstComputeScroll; 

    public MyMapView(Context context, String apiKey) { 
     super(context, apiKey); 
     this.lastMapCenter = new GeoPoint(0, 0); 
     this.isTouchEnded = false; 
     this.isFirstComputeScroll = true; 
    } 
    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_DOWN) 
      this.isTouchEnded = false; 
     else if (event.getAction() == MotionEvent.ACTION_UP) 
      this.isTouchEnded = true; 
     else if (event.getAction() == MotionEvent.ACTION_MOVE) 
      this.isFirstComputeScroll = true; 
     return super.onTouchEvent(event); 
    } 
    @Override 
    public void computeScroll() { 
     super.computeScroll(); 
     if (this.isTouchEnded && 
      this.lastMapCenter.equals(this.getMapCenter()) && 
      this.isFirstComputeScroll) { 
      // here you use this.getMapCenter() (e.g. call onEndDrag method) 
      this.isFirstComputeScroll = false; 
     } 
     else 
      this.lastMapCenter = this.getMapCenter(); 
    } 
} 

Das ist es, ich hoffe, es hilft! o/

+0

Das hat funktioniert, das sollte die akzeptierte Antwort sein. – Federico

0

Seit August 2016 Maps für Android Lage ist, Ereignisse wie onCameraMoveStarted (und die Gründe für den Umzug des Erfassens, zB REASON_GESTURE, REASON_DEVELOPER_ANIMATION.

Der folgende Code (meist aus dem docs genommen) gibt eine Vorstellung davon, was Sie erreichen können:.

public class MyCameraActivity extends FragmentActivity implements 
     OnCameraMoveStartedListener, 
     OnCameraMoveListener, 
     OnCameraMoveCanceledListener, 
     OnCameraIdleListener, 
     OnMapReadyCallback { 

    private GoogleMap mMap; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_my_camera); 

     SupportMapFragment mapFragment = 
      (SupportMapFragment) getSupportFragmentManager() 
        .findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 
    } 

    @Override 
    public void onMapReady(GoogleMap map) { 
     mMap = map; 

     mMap.setOnCameraIdleListener(this); 
     mMap.setOnCameraMoveStartedListener(this); 
     mMap.setOnCameraMoveListener(this); 
     mMap.setOnCameraMoveCanceledListener(this); 

     // Show Sydney on the map. 
     mMap.moveCamera(CameraUpdateFactory 
       .newLatLngZoom(new LatLng(-33.87365, 151.20689), 10)); 
    } 

    @Override 
    public void onCameraMoveStarted(int reason) { 

     if (reason == OnCameraMoveStartedListener.REASON_GESTURE) { 
      Toast.makeText(this, "The user gestured on the map.", 
          Toast.LENGTH_SHORT).show(); 
     } else if (reason == OnCameraMoveStartedListener 
           .REASON_API_ANIMATION) { 
      Toast.makeText(this, "The user tapped something on the map.", 
          Toast.LENGTH_SHORT).show(); 
     } else if (reason == OnCameraMoveStartedListener 
           .REASON_DEVELOPER_ANIMATION) { 
      Toast.makeText(this, "The app moved the camera.", 
          Toast.LENGTH_SHORT).show(); 
     } 
    } 

    @Override 
    public void onCameraMove() { 
     Toast.makeText(this, "The camera is moving.", 
         Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onCameraMoveCanceled() { 
     Toast.makeText(this, "Camera movement canceled.", 
         Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onCameraIdle() { 
     Toast.makeText(this, "The camera has stopped moving.", 
         Toast.LENGTH_SHORT).show(); 
     // Here you get the camera center 
     GeoPoint geoPoint = projection.fromPixels(mMap.getHeight()/2, mMap.getWidth()/2); 
     double centerLat = (double)geoPoint.getLatitudeE6()/(double)1E6; 
     double centerLng = (double)geoPoint.getLongitudeE6()/(double)1E6; 
    } 
} 
Verwandte Themen