Gestion des événements tactiles dans SurfaceView sur Maps API v2

J'ai des problèmes lors de la création du gestionnaire d'événements qui sera déclenché alors que l'utilisateur déplace la carte. Il existe un OnCameraChangeListener , mais il est déclenché après que le déplacement de la carte s'arrête.

J'ai créé SurfaceView sur Maps, et maintenant je n'ai aucune idée de comment gérer onScroll événement à partir d' OnGestureListener .

  • Obtenez le niveau de la batterie uniquement une fois avec Android SDK
  • Image parallèle parallèle à la défilement
  • Existe-t-il une limite pour le nombre de fichiers dans un répertoire sur une carte SD?
  • Comment créer un clavier personnalisé Android?
  • Le fond de la liste est gris sur Droid 3
  • Aucune classe R n'est générée
  • Voici l'exemple de code:

     SurfaceView sv = new SView(); sv.setZOrderOnTop(true); mapView.addView(sv); 

     public class SView extends SurfaceView implements Runnable, android.view.GestureDetector.OnGestureListener { ... @Override public boolean onTouchEvent(MotionEvent event) { //this worked in Overlay in Maps API v1 if(gestureDetector.onTouchEvent(event)) { return true; } return false; } ... @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { Log.i("test","onScroll"); return false; } ... } 

    Si je définis return true dans onTouchEvent , onScroll est appelé, mais je ne peux pas déplacer la Carte (ce qui est évident, l'événement est consommé) et je ne sais pas comment expédier l'événement vers le bas vers l'objet Map.

    Quelqu'un sait comment mettre à jour SurfaceView alors que Map est déplacé?

    2 Solutions collect form web for “Gestion des événements tactiles dans SurfaceView sur Maps API v2”

    J'ai mis en place une autre solution pour résoudre ce problème. Ce que j'ai fait – est-ce que je place mon GoogleMap à l'intérieur de RelativeLayout personnalisé. Après cela, le rappel d' onInterceptTouchEvent fonctionne comme un charme et une carte sous-jacente reçoit des événements tactiles comme prévu

    Voici mon xml:

     <com.my.package.name.map.MapRelativeLayout android:id="@+id/map_root_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" class="com.google.android.gms.maps.SupportMapFragment"/> </com.my.package.name.map.MapRelativeLayout> 

    Et mise en page relative personnalisée:

     package com.my.package.name.map; import android.content.Context; import android.util.AttributeSet; import android.view.GestureDetector; import android.view.MotionEvent; import android.widget.RelativeLayout; public class MapRelativeLayout extends RelativeLayout { private GestureDetector gestureDetector; public MapRelativeLayout(Context context, AttributeSet attrs) { super(context, attrs); gestureDetector = new GestureDetector(context, new GestureListener()); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { gestureDetector.onTouchEvent(ev); return false; } private class GestureListener extends GestureDetector.SimpleOnGestureListener { @Override public boolean onDown(MotionEvent e) { return true; } @Override public boolean onDoubleTap(MotionEvent e) { return false; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { return false; } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { //do whatever you want here return false; } } } 

    À partir de: Android ListView: les causes du défilement ne sont pas exécutées

    Avez-vous essayé d'appeler super.onTouchEvent(event) dans votre méthode onTouchEvent ?

    Edit – Je pense que vous voulez renvoyer les false aussi bien dans votre méthode onScroll .

    Ensuite, votre méthode onTouchEvent devrait être:

     @Override public boolean onTouchEvent(MotionEvent event) { if (gestureDetector.onTouchEvent(event)) { return true; } return super.onTouchEvent(event); } 

    Autres liens utiles possibles:

    • Android: comment dire si une vue fait défiler
    • Ajout de GestureOverlayView à ma classe SurfaceView, comment ajouter à la hiérarchie de vue?
    • Android onFling ne répond pas
    • La méthode OnGestureListener onDown n'est jamais appelée
    • Remplacer onTouchEvent en compétition avec ScrollView
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.