添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
在android的自定义View中,使用Matrix来转换坐标非常方便,其中有一个方法叫mapPoints,它的计算方式是怎么样的呢? 首先来看看Matrix矩阵长得什么样?它是一个3x3的矩阵。

在android的自定义View中,使用Matrix来转换坐标非常方便,其中有一个方法叫mapPoints,它的计算方式是怎么样的呢?

首先来看看Matrix矩阵长得什么样?它是一个3x3的矩阵。
在这里插入图片描述

在编程里,它对应一个长度为9的float[]数组,通过以下变量准确取到数组中相应的值。
在这里插入图片描述

现在再来看看,每一位的含意:

  • MSCALE_X 与 MSCALE_Y:x坐标和y坐标的缩放
  • MSKEW_X 与 MSKEW_Y:x坐标和y坐标的斜切(就是偏斜)
  • MTRANS_X 与 MTRANS_Y:x坐标和y坐标的平移
  • MPERSP_0、MPERSP_1和MPERSP_2:控制透视
  • 好了,我们现在来看一下,mapPoints的计算过程:

    // 初始化 matrix矩阵 val values = floatArrayOf ( 2f , 3f , 10f , 4f , 5f , 30f , 0f , 0f , 1f val matrix = Matrix ( ) matrix . setValues ( values ) // 待转换的点(1,2) val pointsSrc = floatArrayOf ( 1f , 2f ) // 存放转换后的结果 val pointsDst = FloatArray ( 2 ) // 调用mapPoints方法转换数据 matrix . mapPoints ( pointsDst , pointsSrc ) // pointsDst [18.0, 44.0] // 以下的方法也可以完成mapPoints的转换 val points2 = FloatArray ( 2 ) // 转换pointsSrc[0] points2 [ 0 ] = values [ Matrix . MSCALE_X ] * pointsSrc [ 0 ] + values [ Matrix . MSKEW_X ] * pointsSrc [ 1 ] + values [ Matrix . MTRANS_X ] // 转换pointsSrc[1] points2 [ 1 ] = values [ Matrix . MSCALE_Y ] * pointsSrc [ 1 ] + values [ Matrix . MSKEW_Y ] * pointsSrc [ 0 ] + values [ Matrix . MTRANS_Y ] // points2 [18.0, 44.0]

    那么mapPoints的计算方式就如上所示了。

    文章来源: blog.csdn.net,作者:WongKyunban,版权归原作者所有,如需转载,请联系作者。

    原文链接:blog.csdn.net/weixin_40763897/article/details/125586197