假设把我的例子作为PIANO图像...在键盘上的每一次按键我想要执行不同的事件..现在我无法从哪里开始这个.. 如何在android ..
中执行此操作拍下图片:
正如你在图像中看到的,我有一个钢琴图像..并绘制了一些形状的红色和蓝色线..现在我想为这个图像上的每个形状执行不同的事件.. 我怎么能在android编程中做到这一点..
答案 0 :(得分:0)
这似乎是一个基本的碰撞检测问题。
基本上你想要做的当然是听屏幕触摸并接收X& Y的触摸位置。 (你当然可以使用多点触控,只需记住每次触摸都这样做)
当出现触摸时,您将为图像上的每个键计算一堆containsRectanglePoint
。
所以基本上你会把图像分成很多像这样的矩形。
Image http://gyazo.com/df5e0493c7d284221b55de05a07a84c5.png
然后检查该点是否包含任何矩形。
你当然会为所有的钥匙做这件事。
因此,当发生碰撞时,你会仔细研究这一切。
以下代码检查矩形和点之间的碰撞检测。如果该点在矩形范围内,则该方法将返回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
类来存储和计算碰撞,但这需要创建很多类的实例,而且当我们成为时,它会便宜很多谈论记忆,只是存储坐标,然后使用我提供给你的功能。