Lo hice con una máscara como la indicada por Scotty, 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 la ampliación discapacitados y con opciones a todo color 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);
Luego miré hacia arriba las coordenadas de la imagen escalada como este:
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). Solo funciona cuando la imagen se escala con android: scaleType = "fitXY" dentro de ImageView; de lo contrario, las coords están desactivadas.
¿Cómo diablos sería capaz de deducir el país desde el punto de clic? En el mejor de los casos, el oyente conocería las coordenadas de la pantalla y eso es todo. No tendría idea de dónde estaban las fronteras nacionales en la pantalla – NickT
De hecho, el oyente solo sabría las coordenadas en las que se hizo clic. De dos maneras: Haga que el mapa esté compuesto de muchas imágenes con oyentes, una para cada país, todas ellas superpuestas hasta cierto punto para que el mapa se vea correcto. Tal vez hay algún método para hacer esto? Alternativamente, voy a colorear cada país de forma ligeramente diferente (1 bit), para que todos tengan el mismo aspecto, pero puedo verificar el color en la coordenada de la imagen presionada y buscar en una tabla para encontrar el país al que corresponde ese color a. Aunque le agradezco que se tome el tiempo de comentar, ¿quizás alguien más puede tratar de ser más útil? – r3mo
Posible duplicado de [área seleccionable de la imagen] (http://stackoverflow.com/questions/16670774/clickable-area-of-image) – lukle