Après un peu de travail, mon application de routes fonctionne bien. La seule chose que je veux ajouter est une fonction de zoom double tap, mais je ne sais pas comment faire.
Pouvez-vous me donner un indice ?
Après un peu de travail, mon application de routes fonctionne bien. La seule chose que je veux ajouter est une fonction de zoom double tap, mais je ne sais pas comment faire.
Pouvez-vous me donner un indice ?
J'ai également cherché une réponse/un exemple, mais je n'ai trouvé nulle part de code fonctionnel.
Enfin, voici le code qui fonctionne pour moi :
MyMapActivity.java
public class MyMapActivity extends MapActivity
implements OnGestureListener, OnDoubleTapListener {
private MapView mapView;
@Override
public void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mapView = (MapView)findViewById(R.id.mapView);
}
@Override
public boolean onDoubleTap(MotionEvent e) {
int x = (int)e.getX(), y = (int)e.getY();;
Projection p = mapView.getProjection();
mapView.getController().animateTo(p.fromPixels(x, y));
mapView.getController().zoomIn();
return true;
}
// Ici seront également présentes quelques méthodes générées automatiquement
OnDoubleTap.java
public class OnDoubleTap extends MapView {
private long lastTouchTime = -1;
public OnDoubleTap(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
long thisTime = System.currentTimeMillis();
if (thisTime - lastTouchTime < ViewConfiguration.getDoubleTapTimeout()) {
// Double tap
this.getController().zoomInFixing((int) ev.getX(), (int) ev.getY());
lastTouchTime = -1;
} else {
// Trop lent
lastTouchTime = thisTime;
}
}
return super.onInterceptTouchEvent(ev);
}
}
main.xml
N'oubliez pas de remplacer ici la valeur de android:apiKey
par votre apiKey
.
Implémentez GestureListener pour recevoir des événements doubleTap.
voir: Détection de geste Fling sur une grille de disposition
Voici une implémentation simple et précise :
Zoom double clic dans l'activité GoogleMaps
(une réponse tardive pour tous ceux qui viennent sur cette question)
Un ancien post, je sais, mais cette solution fonctionne aussi : double click/tap map zoom (Android)
Je pense qu'il a corrigé ses erreurs dans son propre post, donc utilisez simplement la partie question, pas les réponses (ils sont horribles :))
Utilisez le code suivant lorsque vous voulez zoomer et dézoomer
Zoom arrière double clic sur le bas de 50% de la vue de la carte
@Override public boolean onInterceptTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { long thisTime = System.currentTimeMillis();
DisplayMetrics metrics = new DisplayMetrics(); WindowManager wm = (WindowManager) activity.getSystemService(activity.getApplicationContext().WINDOW_SERVICE); wm.getDefaultDisplay().getMetrics(metrics); int height = metrics.heightPixels;
if (thisTime - lastTouchTime < ViewConfiguration.getDoubleTapTimeout()) { // Double tap if((height/2)>ev.getY()){ // Zoomer this.getController().zoomInFixing((int) ev.getX(), (int) ev.getY()); }else{ this.getController().zoomOutFixing((int) ev.getX(), (int) ev.getY()); //Dézoomer } lastTouchTime = -1; } else { // Trop lent lastTouchTime = thisTime; } } return super.onInterceptTouchEvent(ev); }
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.