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.

  • Android + cargador universal de imágenes: muestra marcador personalizado con imagen en google map
  • Android, ¿Cómo puedo girar una flecha (imagen) alrededor de un punto fijo?
  • Creación de una imagen de fondo para la aplicación de Android - Java
  • Imagen al arrancar / cargar
  • ¿Cómo se repite una imagen sólo verticalmente en android?
  • ¿Cómo incluyo una imagen en una interfaz de Android?
  • Elige la imagen Intención causa excepción nullpointer
  • ¿Cómo enviar múltiples imágenes de las que están presentes en la carpeta de la unidad de google en android mediante programación?
  • Carga perezosa de imágenes en ListView
  • Android: reducción de la calidad de los píxeles en las imágenes cargadas en WebView
  • Android - Dibujo de una imagen de los activos, algo raro está sucediendo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.