我正在尝试使用 android 从我的研究工作中开发一些东西。但我不是编码人员,所以我很难弄清楚如何做事。我想出了实现我的功能的方法,但我对一个我无法自行解决的问题感到震惊。如果你们能帮助我,那就太好了。
我正在尝试显示大于屏幕尺寸的图像,并在我触摸图像中的特定彩色像素时让它播放声音或振动。我能够为图像的第一个实例执行此操作(即,启动我的应用程序后显示的图像),但是一旦我平移它就不起作用了。例如,我的图像在屏幕中间有一个绿色像素,在我平移后它向左移动。一旦我触摸到绿色像素,我就会让它振动。当绿色居中时,设备会振动,但在我平移后它不会更新。当我触摸屏幕中央时它仍然会振动,即使颜色不同也是如此。我猜测该程序修复了屏幕坐标并且没有使用图像坐标。我尝试使用 event.getX、getRawX。但两者都仅引用屏幕坐标。 我的问题是
*有没有一种方法可以定位图像坐标而不是屏幕坐标?
*如果没有,我还能如何完成这项任务?
最佳答案
嗯,它是一种语义,但没有“图像坐标”的概念。
如果你想一想,触摸首先是由一个硬件处理的,除了它的物理像素之外,它完全不知道你正在触摸什么,这就是它向 Android 报告的内容。
反过来,Android 不知道那 block 图像像素是什么。像素中特定图像相对于屏幕的相对位置仅在您的应用程序内部有意义。由于触摸事件源自您的应用程序外部,因此无法将两者相关联....
....除非你建立关联。因此,您在代码中移动了图像以响应触摸事件。记住你将它移动了多远,使用在处理触摸事件的类中定义的变量,然后将其用作后续触摸事件中给定的 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);
关于java - 平移后更新android中的图像坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13299356/