1

我正在尝试使用 android 从我的研究工作中开发一些东西。但我不是编码人员,所以我很难弄清楚如何做事。我想出了实现我的功能的方法,但我对一个我自己无法解决的问题感到有点震惊。如果你们能帮助我,那就太好了。

我正在尝试显示大于屏幕尺寸的图像,并在我触摸图像中的特定颜色像素时使其播放声音或振动。我能够为图像的第一个实例执行此操作(即,一旦我启动我的应用程序就显示的图像),但是一旦我平移它就不起作用。例如,我的图像在屏幕中间有一个绿色像素,平移后它向左移动。一旦我触摸绿色像素,我就会让它振动。当绿色居中时设备会振动,但在我平移后它没有更新。当我触摸屏幕中心时它仍然会振动,即使有不同的颜色。我猜该程序修复了屏幕坐标并且没有使用图像坐标。我尝试使用 event.getX、getRawX。但两者都只引用屏幕坐标。我的问题是

*有没有办法定位图像坐标而不是屏幕坐标?

*如果没有,我还能如何完成这项任务?

4

1 回答 1

1

嗯,这是一种语义,但没有“图像坐标”的概念。

如果您考虑一下,触摸首先是由一块硬件处理的,除了它的物理像素之外,它完全不知道您正在触摸什么,这就是它向 Android 报告的内容。

反过来,Android 也不知道那块图像像素是什么。像素中特定图像对于屏幕的位置仅在您的应用程序内部有意义。由于触摸事件源自您的应用程序之外,因此无法将两者关联起来......

....除非您建立关联。因此,您在代码中移动了图像以响应触摸事件。记住你移动了多远,使用在处理触摸事件的类中定义的变量,然后使用它作为在后续触摸事件中给你的 x 和 y 的偏移量。

例如,您将图像向左平移 200 像素。死点触摸现在对应于图像的中心像素 (x/2) + 200,因为触摸的物理像素现在位于图像中心右侧的 200 处。

[编辑] 对此进行了更多思考,您可能正在使用矩阵来平移图像,如果不是,请查看 Matrix 类。如果你是,那么你可以随时查询矩阵,随时获取 x 和 y 中平移的总量。如果你也在做缩放和/或旋转,事情会变得有点复杂,但这值得提出一个新问题。

[编辑]

要获得 x,y 的颜色:

int pixel = bitmap.getPixel(x,y);

int redValue = Color.red(pixel);
int blueValue = Color.blue(pixel);
int greenValue = Color.green(pixel);
于 2012-11-08T23:36:35.133 回答