在Android中的单个图像上执行多次点击事件

时间:2013-08-17 11:28:03

标签: android image-processing opengl-es

假设把我的例子作为PIANO图像...在键盘上的每一次按键我想要执行不同的事件..现在我无法从哪里开始这个.. 如何在android ..

中执行此操作

拍下图片:

enter image description here

正如你在图像中看到的,我有一个钢琴图像..并绘制了一些形状的红色和蓝色线..现在我想为这个图像上的每个形状执行不同的事件.. 我怎么能在android编程中做到这一点..

1 个答案:

答案 0 :(得分:0)

这似乎是一个基本的碰撞检测问题。

基本上你想要做的当然是听屏幕触摸并接收X& Y的触摸位置。 (你当然可以使用多点触控,只需记住每次触摸都这样做)

当出现触摸时,您将为图像上的每个键计算一堆containsRectanglePoint

所以基本上你会把图像分成很多像这样的矩形。

Image http://gyazo.com/df5e0493c7d284221b55de05a07a84c5.png

然后检查该点是否包含任何矩形。

  • 如果触摸X& Y在1或2中,然后执行该键的事件。
  • 如果触摸X& Y在3,4或5之内执行该键的事件。
  • 如果触摸X& Y在6中,然后执行该键的事件。
  • 如果触摸X& Y在7中,然后执行该键的事件。

你当然会为所有的钥匙做这件事。

因此,当发生碰撞时,你会仔细研究这一切。

简单矩形与点碰撞检测

以下代码检查矩形和点之间的碰撞检测。如果该点在矩形范围内,则该方法将返回true。如果不是,则返回false。

public static boolean containsRectanglePoint(double x, double y, double w, double h, double px, double py)
{
    if (px < x) { return false; }
    if (py < y) { return false; }
    if (px > (x + w)) { return false; }
    if (py > (y + h)) { return false; }

    return true;
}
  • x =矩形X(或AABB最小X)
  • y =矩形Y(或AABB最小Y)
  • w =矩形宽度(或AABB最大X - AABB最小X)
  • h =矩形高度(或AABB最大Y - AABB最小Y)
  • px =第X点
  • py = Y点

在您的情况下px&amp; py是触摸的位置。

你也可以使用Java的标准Rectangle2D类来存储和计算碰撞,但这需要创建很多类的实例,而且当我们成为时,它会便宜很多谈论记忆,只是存储坐标,然后使用我提供给你的功能。