Android:如何使每个国家的可点击的地图图像产生不同的动作?
我需要展示欧洲地图的一个漂亮的图像,我希望我的应用程序,例如,当用户点击每个国家时,提出一个不同的活动 – 地图上的每个国家需要有不同的onClickListener(或同等学历)。
基本上,我需要能够调用一个不同的function,当用户点击法国而不是西class牙在像这样的图像: http : //commons.wikimedia.org/wiki/File : Blank_map_of_Europe_cropped.svg
我怎么会在Android上最好的呢?
我有想法,但可能有一些我忽略的简单方法。
提前谢谢了!
干杯,r3mo
这是我如何解决类似的问题。
首先复制要用作图像映射的图像并为每个部分着色。 不用说,每个部分都有不同的颜色:D。 然后在您的布局中创build两个ImageViews。 将第一个的背景设置为要显示的图像,然后将第二个的背景设置为一个颜色。
然后将第二个ImageView的可见性设置为不可见。 如果此时运行该程序,则应该看到要显示的图像。 然后使用一个OnTouch侦听器,并获取您触摸的像素的颜色。 颜色将对应于彩色图像的颜色。
下面的getColour方法需要传递触摸事件的x和y坐标。 R.id.img2是不可见的图像。
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); }
希望这对你有一些帮助:)。
我用Scotty指出的面具做了这个,但是我遇到了更多的问题。 基本上,getPixel返回的颜色与掩码文件略有不同。 我所做的就是在禁用缩放的情况下将内存加载到内存中,并使用如下所示的全彩色选项:
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);
然后我从缩放的图像中查找这些坐标:
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();
然后我应用mask.getPixel(origX,origY)。 它只适用于在ImageView中使用android:scaleType =“fitXY”缩放图像的情况,否则坐标系将closures。
我没有尝试过,但是这看起来很有希望。
我即将在我的项目中尝试,我希望它适用于你们。
这家伙基本上是试图模拟HTML标记地图在Droid与捏缩放和拖动。
我跟着clausundercover的答案,但仍然有一个区域的像素颜色的一致性的问题。 最后为我工作的是确保我使用掩码索引颜色的PNG图像。 在我的情况下,我使用网页优化调色板(216色),并确保我select的颜色是从该调色板的值。 一旦我做了这个改变,我在整个地区获得了相同的颜色值。