在每个方向上缩放RectF对象

时间:2014-02-14 12:30:06

标签: android android-widget scale

可以在每个方向上按任意因子缩放RectF对象吗? 在实践中,我会调整2个因子一个RectF(如果RectF是200X200我将他变成100x100)

2 个答案:

答案 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比例因子设置新的宽度和高度。 祝你有美好的一天!