1

我有一个位图图像,我正在尝试对其进行命中测试。如果它只是一个普通的位图,命中测试就可以工作。但我需要旋转和缩放位图,我似乎无法正确地计算出命中测试。

x 和 y 这里是光标 x 和 y。我需要检查是否在操纵的位图中单击了光标(手指按下)。规模似乎工作正常,但旋转似乎没有影响。

float[] pts = new float[4];
float left = m.getX();
float top = m.getY();
float right = left + mBitmaps.get(i).getWidth();
float bottom = top + mBitmaps.get(i).getHeight();
pts[0] = left;
pts[1] = top;
pts[2] = right;
pts[3] = bottom;

float midx = left + mBitmaps.get(i).getWidth()/2;
float midy = top + mBitmaps.get(i).getHeight()/2;

Matrix matrix = new Matrix();
matrix.setRotate(m.getRotation(), midx, midy);
matrix.setScale(m.getSize(), m.getSize(), midx, midy);

matrix.mapPoints(pts);

if(x >= pts[0] && x <= pts[2] && y >= pts[1] && y <= pts[3])
{
    return i;
}
4

1 回答 1

3

您的测试失败,因为旋转后矩形不再与坐标轴对齐。

您可以做的一个技巧是使用逆变换矩阵将光标位置转换回来,然后将转换后的位置与原始矩形进行比较。

Matrix matrix = new Matrix();
matrix.setRotate(m.getRotation(), midx, midy);
matrix.postScale(m.getSize(), m.getSize(), midx, midy);

Matrix inverse = new Matrix();
matrix.invert(inverse);
pts[0] = x;
pts[1] = y;
inverse.mapPoints(pts);
if(pts[1] >= top && pts[1] <= bottom && pts[0] >= left && pts[0] <= right)
{
    return i;
}
于 2013-01-14T05:53:32.847 回答