Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 11/03/12, 21:01:38
Array

[xs_avatar]
monchyrcg monchyrcg no está en línea
Miembro del foro
 
Fecha de registro: sep 2011
Localización: Cartagena
Mensajes: 384
Modelo de smartphone: LG Optimus Black
Tu operador: Orange
Ayuda con Mapas

Buenas tardes, hace tiempo que leo esto a parte de seguir el foro de LG.

Bueno ahí va mi pregunta. Yo tengo mi mapa en cual carga de lujo y hagas mis cosillas entre ellas pinto sobre el con un objeto Overlay una chincheta sobre la dirección o coordenadas dadas.

El problema es el siguiente yo lo que quiero es que una vez pintada la chincheta pueda pulsar sobre ella. Algo como lo que puedes hacer en la app de mapas original. Alguien me puede ayudar??

Yo hago lo más fácil pintar una capa encima del mapa (overlay) y sobre esta capa un objeto canvas y ahí puesto pinto lo que quiero. Los canvas no tienen listener. Puedo hacer otra cosa??

Muchas gracias, un saludo.

Última edición por monchyrcg Día 13/03/12 a las 12:19:24.
Responder Con Cita


  #2  
Viejo 12/03/12, 20:34:31
Array

[xs_avatar]
tompad28 tompad28 no está en línea
Miembro del foro
 
Fecha de registro: ago 2011
Mensajes: 128
Modelo de smartphone: Packard Bell Liberty Tab
Tu operador: Simyo
Hola monchyrcg,

No sé si esto te servirá. Existe un evento llamado onTouchEvent() que se ejecuta cada vez que el usuario pulsa sobre la pantalla. A este evento se le pasa un MotionEvent del que se puede extraer la siguiente información:

event.getAction() - Obtiene la acción que el usuario ha realizado sobre la pantalla: MotionEvent.ACTION_DOWN, MotionEvent.ACTION_MOVE, MotionEvent.ACTION_UP.
event.getX() y event.getY() que te devuelven el punto en el que se está ejecutando la acción anterior.

Con estos valores, puedes hacer una función que determine si el punto está dentro del canvas a partir de su ubicación, y en ese caso ejecutar el código que necesites.

Código:
public boolean onTouchEvent(MotionEvent event){
    int action = event.getAction();
    int x = event.getX();
    int y = event.getY();

    switch(action){
    case MotionEvent.ACTION_DOWN:
            comprobarCanvas(x, y);
        }
        break;
    }
}
Donde comprobar canvas sería una función que se recorre los marcadores que indicas y comprueba si el punto está contenido en alguno de ellos.
Responder Con Cita
  #3  
Viejo 12/03/12, 20:58:41
Array

[xs_avatar]
monchyrcg monchyrcg no está en línea
Miembro del foro
 
Fecha de registro: sep 2011
Localización: Cartagena
Mensajes: 384
Modelo de smartphone: LG Optimus Black
Tu operador: Orange
Muchas gracias tompad28 ese el método que uso, el problema es que como le digo en que punto he tocado del mapa. Me explico las coordenadas del canvas viene dada en pixeles y podría hacer un if comparando que coincidan con event.getX y event.getY, por ejemplo, pero no funciona porque lo primero tienes que ser muy fino para tocar justo en el punto y lo segundo y más grande problema es el re dimensionado. Cuando hago zoom in/out los pixeles cambian y entonces que hago??

Yo creo que la solución a todo esto seria pintar algo encima que tuviese un listener pero no se el que. Canvas no tiene? Si pudiese pintar un botón por ejemplo ya estaría.

Alguna sugerencia.

Muchas gracias.
Responder Con Cita
  #4  
Viejo 13/03/12, 00:20:49
Array

[xs_avatar]
tompad28 tompad28 no está en línea
Miembro del foro
 
Fecha de registro: ago 2011
Mensajes: 128
Modelo de smartphone: Packard Bell Liberty Tab
Tu operador: Simyo
Esto ya te lo comento más hablando de programación en general que de android en particular, porque la verdad es que no he llegado a tanto nivel, pero supongo que será un poco similar a los gráficos en 2D del resto de sistemas.

Cuando quieres saber si un punto está dentro de un objeto, no es suficiente sólo con el punto en que se genera el objeto, sino que también necesitas el ancho y el alto. Hay ecuaciones de todo tipo para saber si un punto está dentro de un área, pero por ejemplo la del cuadrado, que es la más fácil y creo que es tu caso, es algo así como:

Suponiendo que tenemos dos puntos, "touch" para donde ha tocado el usuario y "vertice" para el vértice superior izquierdo del cuadro, y dos longitudes "altura" y anchura" tenemos

Código:
bool dentro = touch.x >= vertice.x && touch.x <= (vertice.x + anchura) && touch.y >= vertice.y && touch.y <= (vertice.y + altura)
Responder Con Cita
  #5  
Viejo 13/03/12, 00:39:05
Array

[xs_avatar]
monchyrcg monchyrcg no está en línea
Miembro del foro
 
Fecha de registro: sep 2011
Localización: Cartagena
Mensajes: 384
Modelo de smartphone: LG Optimus Black
Tu operador: Orange
Ahora no lo puedo probar porque estoy reventado la verdad y no me voy a poner. Mañana lo probare, pero en principio muchas gracias.
Responder Con Cita
  #6  
Viejo 13/03/12, 09:43:04
Array

[xs_avatar]
monchyrcg monchyrcg no está en línea
Miembro del foro
 
Fecha de registro: sep 2011
Localización: Cartagena
Mensajes: 384
Modelo de smartphone: LG Optimus Black
Tu operador: Orange
Joder no funciona!! Ahora tengo que estar demasiado fino para darle. Alguien sabe si puedo añadir un surface a un map o algo así. Me tiene esto loco.

Solo quiero pintar algo sobre el mapa que luego pueda pulsar!!!!
Responder Con Cita
  #7  
Viejo 13/03/12, 11:18:45
Array

[xs_avatar]
monchyrcg monchyrcg no está en línea
Miembro del foro
 
Fecha de registro: sep 2011
Localización: Cartagena
Mensajes: 384
Modelo de smartphone: LG Optimus Black
Tu operador: Orange
Lo he conseguido!!!!! Buscando encuentras. VIVA LA API DE GOOGLE!!!!!!!!!!!!!!!!

He conseguido poner un marcador que tenga un listener (no es un listener en realidad) y que me habra un dialog TOMA!!! jajajaja

Bueno me explico un poco, para pintar en el mapa me ayudaba de las capas de Overlay fijándome en la ayuda de google (http://code.google.com/intl/es-ES/an...pis/index.html)
me he dado cuenta que existe la clase OverlayItem que es la base de otra clase llamada ItemizedOverlay. Esta última clase le pone foco a cada uno de los items que pinto en el mapa, fijaros como:

Código:
public class MapViewPruebaActivity extends MapActivity { /** Called when the activity is first created. */ private Drawable drawable = this.getResources().getDrawable(R.drawable.marcador_google_maps); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); MapView mapView = (MapView) findViewById(R.id.mapa); mapView.setBuiltInZoomControls(true); List<Overlay> capas = mapView.getOverlays(); PonerMarcas poner = new PonerMarca(drawable, this); GeoPoint point = new GeoPoint(latitud,longitud); OverlayItem item = new OverlayItem(point, "Titulo", "Info del punto"); poner.addOverlay(item); capas.add(poner); }
......... .... }
Fijaros que el código es facilísimo y muy parecido a la opción Overlay solo que aquí creo un objeto OverlayItem. La clase PonerMarcas deriva de ItemizedOverlay y con el método onTap pongo el dialogo.

Código:
public class PonerMarcas extends ItemizedOverlay{ private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); Context mContext; public PonerMarcas(Drawable defaultMarker) { super(boundCenterBottom(defaultMarker)); } public PonerMarcas(Drawable defaultMarker, Context context) { super(boundCenterBottom(defaultMarker)); mContext = context; } public void addOverlay(OverlayItem overlay) { mOverlays.add(overlay); populate(); } @Override protected OverlayItem createItem(int i) { return mOverlays.get(i); } @Override public int size() { return mOverlays.size(); } @Override protected boolean onTap(int index) { OverlayItem item = mOverlays.get(index); AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); dialog.setTitle(item.getTitle()); dialog.setMessage(item.getSnippet()); dialog.show(); return true; } }
Bueno creo que con el código esta todo perfectamente explicado no? La verdad es que no soy muy bueno explicandome por eso pongo el código!!

Muchas gracias a todos!!!
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 14:43:04 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /