6
votes

Ontouch à MapView ne tire que la première fois

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;
}


0 commentaires

6 Réponses :


0
votes

Que diriez-vous d'utiliser un GestureDetector.ondoubletaPlistener au lieu de ouchlistener ?


1 commentaires

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?



0
votes

Vous devez au moins mettre xxx

sous le xxx

tandis que actouch détecte action_up événement de votre clic. Donc, chaque fois que vous faites un clic, il est appelé 2 fois


0 commentaires

1
votes

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 événements. Il peut être résolu en ajoutant Android: Clickable = "true" au MapView ou en appelant mapviev.setclicable (true)


0 commentaires

13
votes

Si vous utilisez cette méthode "" mapview.setbuiltinzoomcontrols (true); " code> alors votre touche code> fonctionne à la fois.

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>

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;
    }
}


4 commentaires

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



-1
votes

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);
        }
    });


0 commentaires

2
votes

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;
    }
}


0 commentaires