我有一个位图图像,我正在尝试对其进行 HitTest 。如果它只是一个普通位图,则 HitTest 有效。但是我需要旋转和缩放位图,但我似乎无法正确计算出 HitTest 。
这里的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;
}
最佳答案
您的测试失败,因为旋转后矩形不再与坐标轴对齐。
你可以做的一个技巧是用逆变换矩阵将光标位置变换回来,然后将变换后的位置与原始矩形进行比较。
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;
}
关于android - 矩阵操作矩形的 HitTest ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14313381/