Android View 通过平移旋转缩放后,顶点映射

Posted 匆忙拥挤repeat

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android View 通过平移旋转缩放后,顶点映射相关的知识,希望对你有一定的参考价值。

View 通过平移、旋转、缩放后,其本身的 left、top、right、bottom、width、height是没有变化的。
平移:setTranslationX(), setTranslationY() ;
旋转:setRotationX(), setRotationY() ;
缩放:setScaleX(), setScaleY() 。

在三种操作后,获取新的 ltrb、w、h 就需要重新计算了

/**
 * author:  stone
 * email:   aa86799@163.com
 *
 * view 平移、旋转、缩放 变换后,计算新的 ltrb; ltrb ==> dst[0,1,2,7]
 */
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) // 以view的中心点旋转
    matrix.postScale(model.scaleX, model.scaleY, cx, cy)
    matrix.mapPoints(dst)
    return dst

以上是关于Android View 通过平移旋转缩放后,顶点映射的主要内容,如果未能解决你的问题,请参考以下文章

Android View 通过平移旋转缩放后,顶点映射

在平移/缩放/旋转时,将正弦波推动通过一个几何体

Android自定义控件之可平移、缩放、旋转图片控件

在 GLM 中旋转、缩放和平移 2d 点

Android 动画

组合变换