Android Matrix详解

我们在自定义 View 控件时随处可见 Matrix 的身影,主要用于坐标转换映射,我们可以通过 Matrix 矩阵来控制视图的变换。Matrix 本质上是一个如下图所示的矩阵:上面每个值都有其对应的操作。Matrix 提供了如下几个操作:缩放(Scale)对应 MSCALE_X 与 MSCALE_Y位移(Translate)对应 MTRANS_X 与 MTRANS_Y...
摘要由CSDN通过智能技术生成

我们在自定义 View 控件时随处可见 Matrix 的身影,主要用于坐标转换映射,我们可以通过 Matrix 矩阵来控制视图的变换。

Matrix 本质上是一个如下图所示的矩阵:

上面每个值都有其对应的操作。
Matrix 提供了如下几个操作:

  • 缩放(Scale)
    对应 MSCALE_XMSCALE_Y

  • 位移(Translate)
    对应 MTRANS_XMTRANS_Y

  • 错切(Skew)
    对应 MSKEW_XMSKEW_Y

  • 旋转(Rotate)
    旋转没有专门的数值来计算,Matrix 会通过计算缩放与错切来处理旋转。

数学原理

我们先来简单的复习一下矩阵乘法规则。

我们在使用 Matrix 处理视图变换时本质上是通过矩阵映射坐标。
所以上述的几个操作都是对矩阵的操作,我们新建一个 Matrix 后其矩阵为默认状态,其值如下:

可以看到默认状态下的数据都是初始值,即不做任何变换处理,所有坐标保持原样。

缩放(Scale)

对于单个坐标来说,缩放只要将其坐标值值乘以缩放值即可。
假设对某个点宽度缩放 k1 倍,高度缩放 k2 倍,该点坐标为 x0、y0,缩放后坐标为 x、y,那么缩放的公式如下:

我们现在知道了缩放对应矩阵中的两个值的位置以及上面的公式,那现在在用矩阵来描述缩放操作:

等号左边的矩阵就是计算后的缩放结果。

Matrix 中用于缩放操作的方法有如下两个:

void setScale(float sx, float sy);
void setScale(float sx, float sy, float px, float py);

前面两个参数 sx、sy,分别是宽和高的缩放比例。
第二个重载方法多了两个参数 px、py,这两个参数用来描述缩放的枢轴点,关于枢轴点的含义可以看下注释:

Set the matrix to scale by sx and sy, with a pivot point at (px, py). The pivot point is the coordinate that should remain unchanged by the specified transformation.

大概说枢轴点是指定转换应保持不变的坐标。
当我们不传这两个参数时,枢轴点默认为左上角的点,缩放都是向下和向右,所以枢轴点可以大概的理解为缩放的锚点,缩放从这个点开始向四周扩散。
我们用矩阵来描述一下就能明白了。
初始化一个矩阵之后调用缩放方法:

Matrix matrix = new Matrix
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值