J'essaie d'implémenter un zoom de double appuyez sur la fonction de mon MAPView. L'événement tire toujours la première fois, mais jamais les temps ultérieurs. Vous trouverez ci-dessous mon code. J'ai le sentiment que cela a quelque chose à voir avec le contrôleur de carte se perdre après la première fois que l'événement est tiré.
public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN){ Toast.makeText(this,"Down!",Toast.LENGTH_SHORT).show(); } return true; }
6 Réponses :
Que diriez-vous d'utiliser un GestureDetector.ondoubletaPlistener code >
au lieu de ouchlistener code>? p>
Merci pour votre suggestion. Je vais essayer de mettre en place un Ondoubletaplistener pour gérer cette fonctionnalité à la place. Je suis toujours confondu cependant. Je comprends que OndoubletaPlistener est probablement le meilleur moyen de gérer cela, mais le code que j'ai posté en théorie devrait fonctionner, non?
Vous devez au moins mettre sous le p> tandis que actouch code> détecte
action_up code> événement de votre clic. Donc, chaque fois que vous faites un clic, il est appelé 2 fois p> p>
J'avais le même problème - je ne pouvais pas faire glisser et faire défiler la carte car elle ne recevait que Action_down code> événements. Il peut être résolu en ajoutant
Android: Clickable = "true" code> au
MapView code> ou en appelant
mapviev.setclicable (true) p >
Si vous utilisez cette méthode Veuillez supprimer cette ligne et chèque Je suis sûr que cela fonctionnera .. p> Dans certains cas, si vous souhaitez que vous souhaitez que vous puissiez une méthode d'ouverture de superposition asTouch, comme ci-dessous .. p> "" mapview.setbuiltinzoomcontrols (true); " code> alors votre
touche code> fonctionne à la fois.
public class MapOverlay extends Overlay {
public MapOverlay(Context ctx) {super(ctx);}
@Override
protected void draw(Canvas c, MapView osmv, boolean shadow) { }
@Override
public boolean onTouchEvent(MotionEvent e, MapView mapView) {
//Write yout touch code here..
return false;
}
}
C'est vrai, mais pourquoi toucher l'événement appelé une fois?
Je n'ai pas perdu mon temps dessus, alors je ne le sais pas. Je pense qu'aucun besoin de Buttonzoom Button BCZ Carte prend déjà en charge Multi-Touch Zoom et vous pouvez également ajouter votre bouton personnalisé pour zoomer / out ..
Comment dans la classe de superposition liée à ce problème - la MAPView et le zoom Controls?
Pour ajouter un peu plus à la réponse de Capdroid, j'ai créé une instance de mappover, comme indiqué ci-dessus et l'a ajouté aux superpositions de la carte. Et cela fonctionne comme annoncé. :)
Implémentez plutôt l'événement tactile sur la carte de la carte. Cela fonctionnera !!
// The onTouch event of the Map itself does not fire! // We must implement it on the mapView!!! mapView.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { // Your code and remember to return true! return (true); } });
Sous-classe MapView et remplacer Dispatchtouchevent Comme ci-dessous et utilisez la sous-classe à la place.
public class MyMap extends MapView{ @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (mOnMovedListener!= null) { mOnMovedListener.onMove(ev); } return super.dispatchTouchEvent(ev); } private OnMovedListener mOnMovedListener; public void setOnMovedListener(OnMovedListener mOnMovedListener) { this.mOnMovedListener= mOnMovedListener; } }