2 votes

Double tape : zoom sur Android MapView ?

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 ?

6voto

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.

1voto

reflog Points 4994

Implémentez GestureListener pour recevoir des événements doubleTap.

voir: Détection de geste Fling sur une grille de disposition

1voto

Bachi Points 2009

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)

1voto

Igor Points 580

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 :))

0voto

Sudhir Points 1

Utilisez le code suivant lorsque vous voulez zoomer et dézoomer

  1. zoom avant double clic sur le haut de 50% de la vue de la carte
  2. 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.com

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.

Powered by:

X