Android 自定义view中如何判断一个点是否在 经过旋转的 RectF 内?

在Android自定义View中,当RectF经过旋转后,使用常规的rect.contains(x, y)方法无法准确判断点击点是否在旋转的矩形区域内。文章详细分析了这个问题,并提出了通过旋转矩形的四个顶点,重新构成四边形来判断点击有效性的方法,以解决相册图片编辑功能中的文字区域点击bug。" 120835597,11512391,使用Email Future给未来的自己写信,['其他'],"['Email Future', '时间胶囊', '未来邮件', '自我提醒', '英文内容']
摘要由CSDN通过智能技术生成

最近在做相册的图片编辑功能,遇到一个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;
		
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值