确定点是否在变换矩阵内

时间:2014-03-12 13:55:33

标签: java android matrix

考虑以下示例:

Matrix transformation

蓝色窗格是ImageView,红色窗格是实际的可见图像/位图。 使用setImageMatrix设置矩阵变换,得到右边的红色正方形(经过平移,缩放和旋转)。

onTouch ImageView的{​​{1}}方法中,我想确定触摸是否发生在红色方块内。这是怎么做到的?

1 个答案:

答案 0 :(得分:1)

在克里斯'的帮助下指针和pskink的示例代码我得到了以下内容:

/**
 * Transformation matrix used to transform the image
 */
private Matrix transformationM;

/**
 * Matrix that is used in calculations (inverse of tranformation matrix)
 */
private Matrix tmpM;

/**
 * Checks whether a point is on the transformed image
 */
public boolean pointIsOnImage(float x, float y) {
    // Float array that will hold the mapped point (see 'mapPoints' below)
    float[] p1 = {0, 0};

    // Float array that holds the touch position
    final float[] p2 = {x, y};

    // Reset temporary matrix
    tmpM.reset();

    // Get the inverse matrix of the current transformation matrix and store it in the temporary matrix
    transformationM.invert(tmpM);

    // Map the touch position on the inverse matrix
    tmpM.mapPoints(p1, 0, p2, 0, 1);

    // Check if touch position is in the drawable bounds
    return getDrawable().getBounds().contains((int) p1[0], (int) p1[1]);
}

我可以通过这种方式调用getDrawable()的原因是因为我在扩展ImageView的类中使用此代码。如果您创建方法参数的可绘制部分,则可以在任何地方使用此代码。