android - 如何检测点击了哪个矩形?

标签 android algorithm android-layout

我的屏幕上有几个矩形,其中一些是旋转的。现在用户点击屏幕的一个位置(x,y)。是否有标准算法来检测哪个矩形被点击(包含 (x,y) 坐标)?

这与我遇到的问题有关: Child Views that are translated, scaled or rotated disappear

最佳答案

如果您搜索“多边形算法中的点”,您会找到一堆。对于矩形,我想最简单的是将矩形分成两个三角形并检查测试点的barycentric coordinates。 .这是一个未经测试的即兴编码尝试:

boolean pointInTriangle(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3) {
    int denom = (y2-y3)*(x1-x3) + (x3-x2)*(y1-y3);
    if(denom==0) return false; // collinear

    int num1 = (y2-y3)*(x-x3) + (x3-x2)*(y-y3);
    if((denom < 0 && num1 > 0) || (denom > 0 && num1 < 0)) return false;

    int num2 = (y3-y1)*(x-x3) + (x1-x3)*(y-y3);
    if((denom < 0 && num2 > 0) || (denom > 0 && num2 < 0)) return false;

    int num3 = denom - num1 - num2;
    if((denom < 0 && num3 > 0) || (denom > 0 && num3 < 0)) return false;

    return true;
}

现在您只需遍历矩形,检查该点是否位于构成矩形的两个三角形中的任意一个中。

关于android - 如何检测点击了哪个矩形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4975162/

相关文章:

android - S Pen 多窗口 SDK Proguard 规则

android - 选择列表在对话框中的 AutoCompleteTextView 中被截断

android - 如何使用 Bing 翻译服务在 android 上播放特定单词的音频?

c# - 所有案例都涵盖了 Bresenham 的线算法

适用于小屏幕的 Android eclipse 图片

android - 签署 APK 会导致 com.android.sdklib.BuildToolInfo.getPath(BuildToolInfo.java :244)

c - 求两个整数以获得最大公约数(GCD)?

python - Numpy 在索引周围创建掩码数组的最快方法

Android SeekBar 长度与 layout_width 值不匹配

android - Viewpager 在协调器布局中溢出屏幕