2016-10-19 4 views
0

Dans ma carte, je suis en train de capturer le zoom avant/arrière à l'aide ScaleGestureDetector mais je suis jamais recevoir des callbacks à l'une des onScale ou onScaleBegin ou onScaleEnd.Google Maps deux callbacks pincée/étirement doigt

Dans mon Fragment onCreateView, j'initialiser:

scaleGestureDetector = new ScaleGestureDetector(getContext(), new simpleOnScaleGestureListener());

Et je mets en œuvre les callbacks comme ceci:

public class simpleOnScaleGestureListener extends 
     SimpleOnScaleGestureListener { 

    @Override 
    public boolean onScale(ScaleGestureDetector detector) { 
     // TODO Auto-generated method stub 
     startScale = detector.getScaleFactor(); 
     Log.d(TAG, "::onScale:: " + detector.getScaleFactor()); 
     return true; 
    } 

    @Override 
    public boolean onScaleBegin(ScaleGestureDetector detector) { 
     // TODO Auto-generated method stub 
     Log.d(TAG, "::onScaleBegin:: " + detector.getScaleFactor()); 
     return true; 
    } 

    @Override 
    public void onScaleEnd(ScaleGestureDetector detector) { 
     // TODO Auto-generated method stub 
     Log.d(TAG, "::onScaleEnd:: " + detector.getScaleFactor()); 
     endScale = detector.getScaleFactor(); 

} 

Aussi, est-il juste de supposer que les callbacks seront appelés en continu chaque fois que l'utilisateur effectue un zoom avant/arrière?

Répondre

0

J'ai réussi à surmonter le problème des rappels. Essentiellement, deux choses:

  1. Dans votre activité/fragment, mettre en œuvre, GoogleMap.OnCameraIdleListener
  2. En onMapReady(), call mMap.setOnCameraIdleListener(this);
  3. Par conséquent, passer outre onCameraIdle():

@Override public void onCameraIdle() { Log.i(TAG, "::onCameraIdle::" + mMap.getCameraPosition().toString()); }

pour obtenir lat/long, zoom, inclinaison et roulement, essentiellement CameraPosition.

J'ai trouvé un moyen d'obtenir un rayon en mètres en se référant à cette response

VisibleRegion vr = map.getProjection().getVisibleRegion(); 

Location center = new Location("center"); 
center.setLatitude(vr.latLngBounds.getCenter().latitude); 
center.setLongitude(vr.latLngBounds.getCenter().longitude); 

//Location("radiusLatLng") as mentioned in google maps sample 
Location farVisiblePoint = new Location("radiusLatLng"); 
farVisiblePoint.setLatitude(vr.farLeft.latitude); 
farVisiblePoint.setLongitude(vr.farLeft.longitude); 

radius = center.distanceTo(farVisiblePoint);