2010-05-07 4 views
2

Je ne peux pas obtenir ce travail. J'ai essayé d'utiliser le code ci-dessous avec onTouchEventand et cela ne fonctionne pas. Si je reviens vrai à la fin de la méthode, j'obtiens le toast avec les coordonnées mais je ne peux pas déplacer une carte, et si je renvoie false, je peux déplacer une carte mais ne peux pas afficher un toast après que l'utilisateur clique sur une carte . Si je comprends bien, l'autre méthode onTap est utilisée uniquement pour cliquer sur un recouvrement. Quelqu'un a-t-il pensé à cela?Obtenir des coordonnées en cliquant n'importe où sur un MapView

 public boolean onTouchEvent(MotionEvent arg0, MapView arg1) { 

     //super.onTouchEvent(arg0); 


     int akcija = arg0.getAction(); 

     if(akcija == MotionEvent.ACTION_UP){ 
      if(!premik) { 
       Projection proj = mapView.getProjection(); 
       GeoPoint loc = proj.fromPixels((int)arg0.getX(), (int)arg0.getY()); 
       String sirina=Double.toString(loc.getLongitudeE6()/1000000); 
       String dolzina=Double.toString(loc.getLatitudeE6()/1000000); 

       Toast toast = Toast.makeText(getApplicationContext(), "Širina: "+sirina+" Dolzina: "+dolzina, Toast.LENGTH_LONG); 
       toast.show(); 
      } 
     }  

     else if (akcija == MotionEvent.ACTION_DOWN){ 

      premik= false; 

     } 
     else if (akcija== MotionEvent.ACTION_MOVE){    
      premik = true; 
     } 


     return false; 
     //return super.onTouchEvent(arg0); 
     } 

Répondre

6

Utilisez la méthode dispatchTouchEvent(). Ça marche. pourquoi parce que MapActivity hérite de l'événement dispatchTouch et non de OnTouchEvent de la classe d'activité. Cochez cette case

@Override 
public boolean dispatchTouchEvent(MotionEvent ev) { 
    int actionType = ev.getAction(); 
    switch (actionType) { 
    case MotionEvent.ACTION_UP: 
      Projection proj = mapView.getProjection(); 
      GeoPoint loc = proj.fromPixels((int)ev.getX(), (int)ev.getY()); 
      String longitude = Double.toString(((double)loc.getLongitudeE6())/1000000); 
      String latitude = Double.toString(((double)loc.getLatitudeE6())/1000000); 

      Toast toast = Toast.makeText(getApplicationContext(), "Longitude: "+ longitude +" Latitude: "+ latitude , Toast.LENGTH_LONG); 
      toast.show(); 

    } 

    return super.dispatchTouchEvent(ev); 
} 
+0

Cela fonctionne dans l'émulateur, mais échoue sur mon héros. Je suppose que c'est juste un autre bug spécifique de héros: ( – DixieFlatline

+0

événement dispatchTouch n'est pas détecté sur mon héros – DixieFlatline

+0

son par un problème de version firmwaret de héros qui est le niveau de l'API est 3.bout dispatchtouch Méthodes d'événements dans le niveau API 4. donc il ne pouvait pas fonctionner – Praveen

Questions connexes