最近在做相册的图片编辑功能,遇到一个bug,插入文字后旋转文字区域,点击文字区域无法触发,分析原因是判断时认定为点没在RectF内。如图:
如果只是通过rect.contains(x, y)来判断,那么实际区域则是绿色区域的部分,则有部分无法点击,如下图:
因此需要将矩形框旋转。
如果通过matrix.mapRect(rect)来获取转换后的区域,再通过rect.contains(x, y)来判断是否落在区域内,那么实际区域如下图绿色区域,则点击非区域内的位置仍会触发文字区域的点击,如下图:
Matrix matrix = new Matrix();
matrix.setRotate(roatetAngle, mHelpBoxRect.centerX(), mHelpBoxRect.centerY());
matrix.mapRect(mHelpBoxRect);
因此,无法通过rect.contains(x, y)来判断点是否落在区域内。需要将原矩形四个顶点旋转,将转换后的矩形四个顶点重新构成四边形,再判断点是否落在该四边形内。
public boolean clickHelpBoxRect(float x, float y) {
if (mHelpBoxRect == null || mHelpBoxRect.isEmpty()) {
return false;
}
boolean isClickHelpBoxRect;