Gibt es einen Weg durch die Android-Karten-API, wo ich das Kartenzentrum erkennen kann, nachdem die Schwenkanimation abgeschlossen wurde? Ich möchte diese Informationen verwenden, um Markierungen von einem Server dynamisch zu laden. Danke BDandroid maps: Wie man die Kartenmitte nach dem Ziehen ermittelt
Antwort
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;
}
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/
Das hat funktioniert, das sollte die akzeptierte Antwort sein. – Federico
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;
}
}
- 1. Android Google Maps: disable in MapFragment ziehen
- 2. Wie ermittelt man die aktuelle Eingabesprache?
- 3. AJAX - Wie ermittelt man die beste Abfragehäufigkeit?
- 4. Wie ermittelt man die Inhaltsgröße eines WKWebView?
- 5. Android: Wie startet man die Videovorschau nach dem SurfaceDestroyed()?
- 6. Ziehen von unten Ansicht wie Google Maps
- 7. Wie ermittelt Android den Status der Internetverbindung?
- 8. Wie ermittelt man den Farbton?
- 9. Abbrechen UIScrollView Bounce nach dem Ziehen
- 10. Wie ermittelt man den MIME-Typ der Datei nach Inhalt?
- 11. So deaktivieren Google Maps ziehen
- 12. Wie ermittelt WiX die Dateiversion?
- 13. Kopieren div nach dem Ziehen jquery
- 14. Wie werden Ressourcenbezeichnerwerte in Android ermittelt?
- 15. iOS Google Maps Marker ziehen Animation
- 16. Wie ermittelt man, ob die Rails-Assoziation geladen ist?
- 17. Wie wird die Version von Gradle ermittelt?
- 18. Words With Friends: Wie man die Wortstärke ermittelt
- 19. Wie Rollback nach Git ziehen
- 20. Wie ermittelt man die aktuelle Caret-Position in einem UITextField?
- 21. Wie ermittelt man die Datentypen der Ergebnisse eines SQL?
- 22. Wie ermittelt man die Boost-Version auf einem System?
- 23. Wie ermittelt man den Feldtyp für die SOLR-Indizierung?
- 24. Wie ermittelt man die Anzahl von "Spaltenname" in einer Tabelle?
- 25. Wie ermittelt man die optimale Größe des Fadenstapels?
- 26. Wie ermittelt man die aktuelle Version von ASP.NET MVC?
- 27. Wie ermittelt man die beste Anzahl von Threads in Tomcat?
- 28. Wie ermittelt man Datenbankbeziehungen aus PASE/Qshell?
- 29. Wie ermittelt man, woher dieses Speicherleck stammt?
- 30. Groovy/Grails, wie man einen Datentyp ermittelt?
dies die „fling“ Does Griff, wo die Karte bewegt ein kleines Stück hält, wenn Sie es schleudern (nachdem Sie den Finger heben) –
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