Java Android将图像划分为多个区域,用于onClick事件

Java Android将图像划分为多个区域,用于onClick事件,java,android,split,onclick,imageview,Java,Android,Split,Onclick,Imageview,在这个应用程序中,我有一个代表德国地图的图像。我希望能够点击一个特定的州,例如巴伐利亚州,然后发生一些事情(点击功能) 我可能会在充满图像的空白图像上放置一个表格布局,并仅在覆盖状态的图像上激活点击方法,但这可能是糟糕的编码,我认为与其他类型的设备、平板电脑或更大/更小的屏幕不兼容 另一个解决方案是创建地图的两个图像。一个具有不同颜色的状态,另一个具有要显示的所需布局。把彩色的放在第二个上面,作为不可见的 XML: 颜色工具: public class ColorTool { publi

在这个应用程序中,我有一个代表德国地图的图像。我希望能够点击一个特定的州,例如巴伐利亚州,然后发生一些事情(点击功能)

我可能会在充满图像的空白图像上放置一个表格布局,并仅在覆盖状态的图像上激活点击方法,但这可能是糟糕的编码,我认为与其他类型的设备、平板电脑或更大/更小的屏幕不兼容

另一个解决方案是创建地图的两个图像。一个具有不同颜色的状态,另一个具有要显示的所需布局。把彩色的放在第二个上面,作为不可见的

XML:

颜色工具:

public class ColorTool {
    public boolean closeMatch (int color1, int color2, int tolerance) {
        if ((int) Math.abs (Color.red (color1) - Color.red (color2)) > tolerance ) return false;
        if ((int) Math.abs (Color.green (color1) - Color.green (color2)) > tolerance ) return false;
        if ((int) Math.abs (Color.blue (color1) - Color.blue (color2)) > tolerance ) return false;
        return true;
    } // end match
} // end class

正如所料,这对我不起作用。有人能给我解释一下这个方法吗?或者是一个好方法,让图像“映射”有多个区域可以点击吗?

我在想一个2D矩阵有一个状态映射。应该有一个矩阵的初始版本,它根据不同区域的位置以不同的数字进行映射。对于较大或较小的屏幕尺寸,矩阵需要是动态的,并在像素之间重新映射。让我们考虑下面的网格作为一个例子。
--------------
00111122224444
01111222222444
11122222444444
11222244444433
12222444444333
22224444444433
22255444444333
22555554443333
25555555433333
--------------
我们可以在地图后面的矩阵中看到5个州及其各自的编号。如果屏幕大小加倍,则需要将值转换为更大的段,反之亦然

我正在考虑绘制这样的矩阵,它可以根据屏幕大小转换成更大或更小的尺寸。现在,您需要将地图的图像设置为屏幕背景,并使用
onTouchListener
获取被触摸区域的像素,以确定单击的区域


这只是想让大家了解如何解决这个问题。我发现了一个类似的想法。希望有帮助

我在考虑一个2D矩阵,它有一个状态图。应该有一个矩阵的初始版本,它根据不同区域的位置以不同的数字进行映射。对于较大或较小的屏幕尺寸,矩阵需要是动态的,并在像素之间重新映射。让我们考虑下面的网格作为一个例子。
--------------
00111122224444
01111222222444
11122222444444
11222244444433
12222444444333
22224444444433
22255444444333
22555554443333
25555555433333
--------------
我们可以在地图后面的矩阵中看到5个州及其各自的编号。如果屏幕大小加倍,则需要将值转换为更大的段,反之亦然

我正在考虑绘制这样的矩阵,它可以根据屏幕大小转换成更大或更小的尺寸。现在,您需要将地图的图像设置为屏幕背景,并使用
onTouchListener
获取被触摸区域的像素,以确定单击的区域

这只是想让大家了解如何解决这个问题。我发现了一个类似的想法。希望有帮助

--------------
00111122224444
01111222222444
11122222444444
11222244444433
12222444444333
22224444444433
22255444444333
22555554443333
25555555433333
--------------