Xamako escribió:admin escribió:Buenas, te respondo lo que le respondi en su momento a ftg81
El tema esta en la clase MapaLugaresActivity, hay un metodo que se llama OnTouchEvent... alli hay un fragmento:
Código:
case MotionEvent.ACTION_MOVE:
// Si nos movemos menos de 1.0 pixeles iniciaremos la actividad
if (!mapMoved) {
if (event.getHistorySize() > 0) {
if ((Math.abs(event.getX() - event.getHistoricalX(0)) > 1.0)
|| (Math.abs(event.getY()- event.getHistoricalY(0)) > 1.0)) {
mapMoved = true;
}
}
}
break;
Basicamente lo que hacen las lineas de arriba, es que si movemos el mapa mas de 1.0 pixeles de forma absoluta en el eje X o Y tomara el movimiento como que movemos el mapa, y si nos movemos menos tomara el movimiento como un tick y creara un nuevo punto.
Puedes hacer pruebas, pero en la version del GooglePlay esta a 1.0 pixel tambien!
Saludos!!
Gracias, ya vi esa respuesta pero el caso es que pasa eso. En modo depuración lo que veo es que accede 4 veces al evento (dos veces corresponden al ACTION_DOWN y otras dos al ACTION_UP), cuando sólo hago una pulsación con el dedo. Si lo que hago es un desplazamiento, entra hasta 10 veces en el evento. Creo que el problema tiene que ver con las variables mapMoved y tappedItem, que al entrar tantas veces en el evento pierden su cometido.
Bueno, buscaré otra alternativa para solucionar esta incidencia y si encuentro algo interesante ya os cuento.
Muchas gracias de nuevo
Al final lo solucioné de otra forma. Pongo aquí el código referente:
//Se dispara cuando el usuario hace click sobre un lugar guardado
@Override
protected boolean onTap(int index) {
String n = mOverlays.get(index).getTitle();
Intent i = new Intent();
i.setClass(MapaLugaresActivity.this,
MostrarLugarActivity.class);
i.putExtra("datos", n);
startActivityForResult(i, 1);
return true;
}//end-onTap
//Se dispara cuando el usuario hace click sobre un punto vacio del mapa
public boolean onTap (final GeoPoint punto, final MapView mapView){
boolean tapped = super.onTap(punto, mapView);
//Comprobamos si es un lugar guardado
if (!tapped){ //Ver que no sea arrastrar. Si arrastra no se hace nada
if (!isPinch) { //si no es arrastra es pulsación, en ese caso
// iniciamos la actividad EditarLugarActivity para crear un lugar nuevo
double lon = (double) (punto.getLongitudeE6() / 1E6);
double lat = (double) (punto.getLatitudeE6() / 1E6);
Intent i = new Intent();
i.setAction("crear");
i.putExtra("lat", lat);
i.putExtra("lon", lon);
i.setClass(MapaLugaresActivity.this,
EditarLugarActivity.class);
startActivityForResult(i, 1);
}//end-if
}//end-if
return true;
}//end-onTap
@Override
public boolean onTouchEvent(MotionEvent e, MapView mapView)
{ //ver el tipo de acción que se ha realizado
int fingers = e.getPointerCount();
if( e.getAction()==MotionEvent.ACTION_DOWN ){ //pulsa
isPinch =false;
}
if( e.getAction()==MotionEvent.ACTION_MOVE && fingers==2 ){ //desplaza
isPinch=true;
}
return super.onTouchEvent(e,mapView);
}//end onTouchEvent