可以在每个方向上按任意因子缩放RectF对象吗? 在实践中,我会调整2个因子一个RectF(如果RectF是200X200我将他变成100x100)
答案 0 :(得分:4)
尝试这样的事情:
private void scale(RectF rect, float factor){
float diffHorizontal = (rect.right-rect.left) * (factor-1f);
float diffVertical = (rect.bottom-rect.top) * (factor-1f);
rect.top -= diffVertical/2f;
rect.bottom += diffVertical/2f;
rect.left -= diffHorizontal/2f;
rect.right += diffHorizontal/2f;
}
这是在没有测试的情况下完成的,但我认为它应该可行。这应该使中心保持在同一个位置并向外扩展。所有方面都将是两倍大。
答案 1 :(得分:1)
这是我在Kotlin的解决方案。
private fun RectF.scale(factor: Float) {
val oldWidth = width()
val oldHeight = height()
val rectCenterX = left + oldWidth / 2F
val rectCenterY = top + oldHeight / 2F
val newWidth = oldWidth * factor
val newHeight = oldHeight * factor
left = rectCenterX - newWidth / 2F
right = rectCenterX + newWidth / 2F
top = rectCenterY - newHeight / 2F
bottom = rectCenterY + newHeight / 2F
}
转换应保持rect的中心为同一坐标(rectCenterX, rectCenterY)
,并使用float比例因子设置新的宽度和高度。
祝你有美好的一天!