检查触摸点是否位于给定区域内

时间:2013-06-24 07:01:32

标签: java android image touch hittest

看看下面的图片。

enter image description here

总图像约为300X300。里面有1个钻石形状。我知道它的要点如下

    pointA = new Point(0, 183);
    pointB = new Point(183, 0);
    pointC = new Point(366, 183);
    pointD = new Point(183, 366);

如果我触摸整个图像,如何检测触摸点是在钻石区域内还是外部? 我也查看了this链接,但无法理解一些观点。

3 个答案:

答案 0 :(得分:2)

您所指的是L1 NormManhattan Distance。要测试您的点击点是否在您的钻石内(或者小于L1的标准值183,您需要做的就是执行以下操作(使用伪代码):

isInside(ClickedPoint)
{
    X=abs(ClickedPoint.x-183);
    Y=abs(Clickedpoint.y-183);

    if (X+Y<=183) return inside
    else return outside
}

很抱歉不包含真正的Java代码,但这不应该太难编码。

答案 1 :(得分:1)

Shape创建Points个对象 检查Shpae中是否存在该点 我不确定这个,但它应该与这个相似......

Rectangle rect = new Rectangle();//use your points co-ordinates 
    if (rect.contains(x,y))
     {
       //isinside
     }

答案 2 :(得分:1)

您需要做的是将触摸点和钻石点旋转45度:

public Point rotatePoint(Point pt, Point center)
{
    double cosAngle = Math.cos(45);
    double sinAngle = Math.sin(45);
    double dx = (pt.x-center.x);
    double dy = (pt.y-center.y);
    pt.x = center.x + (int) (dx*cosAngle-dy*sinAngle);
    pt.y = center.y + (int) (dx*sinAngle+dy*cosAngle);
    return pt;
}

从点创建一个Rect:

Point centerPoint = new Point(183,183);
Rect r = new Rect(rotatePoint(pointA, centerPoint).x, rotatePoint(pointA, centerPoint).y, rotatePoint(pointC, centerPoint).x, rotatePoint(pointC, centerPoint).y);

然后使用测试,如果它包含点:

r.contains(rotatePoint(ClickedPoint, centerPoint))

如果该点位于钻石中,则返回true。