考虑以下示例:
蓝色窗格是ImageView
,红色窗格是实际的可见图像/位图。
使用setImageMatrix
设置矩阵变换,得到右边的红色正方形(经过平移,缩放和旋转)。
在onTouch
ImageView
的{{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
的类中使用此代码。如果您创建方法参数的可绘制部分,则可以在任何地方使用此代码。