View 通过平移、旋转、缩放后,其本身的 left、top、right、bottom、width、height是没有变化的。 平移:setTranslationX(), setTranslationY() ; 旋转:setRotationX(), setRotationY() ; 缩放:setScaleX(), setScaleY() 。
在三种操作后,获取新的 ltrb、w、h 就需要重新计算了
fun mapPoints(model: View): FloatArray {
val l = model.left
val t = model.top
val r = model.left + model.width
val b = model.top + model.height
val dst = floatArrayOf(
l, t,
r, t,
l, b,
r, b)
val matrix = Matrix()
val cx = l + (r - l) / 2
val cy = t + (b - t) / 2
matrix.postTranslate(model.translationX, model.translationY)
matrix.postRotate(model.rotate, cx, cy)
matrix.postScale(model.scaleX, model.scaleY, cx, cy)
matrix.mapPoints(dst)
return dst
}
|