Android: ¿cómo hacer una imagen de mapa clicable con cada país produciendo una acción diferente?

Necesito mostrar una bonita imagen de un mapa de Europa, y quiero que mi aplicación, por ejemplo, traer una actividad diferente, cuando el usuario haga clic en cada país – cada país en el mapa debe tener un OnClickListener diferente (o equivalente).

Esencialmente, necesito ser capaz de llamar a una función diferente cuando el usuario taps en Francia en lugar de España en una imagen como esta: http://commons.wikimedia.org/wiki/File:Blank_map_of_Europe_cropped.svg

¿Cómo sería mejor ir sobre esto en Android?

Tengo ideas, pero puede haber alguna forma sencilla de pasar por alto.

¡Muchas gracias de antemano!

Saludos, r3mo

He aquí cómo resolví un problema similar.

Primero, duplique la imagen que desea utilizar como mapa de imagen y coloree cada sección. Huelga decir, un color diferente para cada sección: D. A continuación, cree dos imágenes en su diseño. Establecer el fondo de la primera como la imagen que desea mostrar a la pantalla y el fondo de la segunda como el color en uno.

A continuación, establezca la visibilidad de la segunda ImageView a invisible. Si ejecuta el programa en este punto, debe ver la imagen que desea mostrar. A continuación, utilice un detector de OnTouch y obtenga el color del píxel en el que ha tocado. El color corresponderá al de la imagen coloreada.

El siguiente método getColour tendría que pasar las coordenadas xey del evento touch. R.id.img2 es la imagen invisible.

private int getColour( int x, int y) { ImageView img = (ImageView) findViewById(R.id.img2); img.setDrawingCacheEnabled(true); Bitmap hotspots=Bitmap.createBitmap(img.getDrawingCache()); img.setDrawingCacheEnabled(false); return hotspots.getPixel(x, y); } 

Espero que esto fue de alguna ayuda para usted :).

Lo hice con una máscara como Scotty indicó, pero me encontré con más problemas. Básicamente los colores devueltos por getPixel eran ligeramente diferentes que en el archivo de máscara. Lo que hice fue cargar la máscara en la memoria con escala deshabilitada y con opciones de color completo como este:

 BitmapFactory.Options bitmapOptions = new BitmapFactory.Options(); bitmapOptions.inTargetDensity = 1; bitmapOptions.inDensity = 1; bitmapOptions.inDither = false; bitmapOptions.inScaled = false; bitmapOptions.inPreferredConfig = Bitmap.Config.ARGB_8888; mask = BitmapFactory.decodeResource(appContext.getResources(), resMask, bitmapOptions); 

Entonces miré hacia arriba las cuerdas de la imagen escalada como esta:

 ImageView map = (ImageView) findViewById(R.id.image); Drawable drawable = map.getDrawable(); Rect imageBounds = drawable.getBounds(); int scaledHeight = imageBounds.height(); int scaledWidth = imageBounds.width(); int scaledImageOffsetX = Math.round(event.getX()) - imageBounds.left; int scaledImageOffsetY = Math.round(event.getY()) - imageBounds.top; int origX = (scaledImageOffsetX * mask.getWidth() / scaledWidth); int origY = (scaledImageOffsetY * mask.getHeight() / scaledHeight); if(origX < 0) origX = 0; if(origY < 0) origY = 0; if(origX > mask.getWidth()) origX = mask.getWidth(); if(origY > mask.getHeight()) origY = mask.getHeight(); 

Y luego apliqué mask.getPixel (origX, origY). Sólo funciona cuando la imagen se escala con android: scaleType = "fitXY" dentro del ImageView de lo contrario las coords están desactivadas.

No lo he probado, pero esto parece muy prometedor.

Estoy a punto de probarlo en mi proyecto, espero que funcione para ustedes.

Este tipo es básicamente tratando de emular HTML Tag Map en droid con pinch zoom y arrastrar.

Seguí la respuesta de clausundercover pero todavía tenía problemas con la consistencia del color del pixel sobre una región. Lo que finalmente funcionó para mí es asegurarse de que utilizo una imagen PNG con color indexado para la máscara. En mi caso utilicé la paleta web optimizada (216 colores) y me aseguré de que cualquier color que escogí eran valores de esa paleta. Una vez que hice este cambio, conseguí el mismo valor del color sobre la región entera.

  • Cómo cargar la imagen de la URL de carga de perezosos en Google Maps
  • Cómo poner una imagen a la derecha de un botón de radio, Android
  • Android: mostrar imágenes en la vista Web
  • Combinar imágenes en android
  • Cómo detectar fotos oscuras en Android
  • Resize Drawable en Android
  • Invisible / botón transparente que funciona como un regular en android?
  • Puedo obtener el ancho de archivo de imagen y la altura de uri en android?
  • Nueva advertencia en Android 4.4
  • Imágenes con: nopm: in filename
  • ¿Cómo cambio el tinte de un ImageButton en el enfoque / presione
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.