android 绘制几何变换

  • 使用Canvas做常见的二维变换
    • canvas.translate
    • canvas.rotate
    • canvas.scale
    • canvas.skew
  • 使用Matrix做常见的和不常见的二维变换
    • Matrix做变换的常见方式
      • new一个Matrix对象
      • 调用Matrix的pre/postTranslate/Rotate/Scale/Skew方法来设置变换
      • 调用canvas.concat(matrix)来把几何变换应用到Canvas
    • 使用Matrix来做自定义变换
      • 自定义变换使用的是setPolytoPoly方法
      • poly 就是「多」的意思。setPolyToPoly() 的作用是通过多点的映射的方式来直接设置变换。「多点映射」的意思就是把指定的点移动到给出的位置,从而发生形变。例如:(0, 0) -> (100, 100)
        表示把 (0, 0) 位置的像素移动到 (100, 100) 的位置,这个是单点的映射,单点映射可以实现平移。而多点的映射,就可以让绘制内容任意地扭曲。

        //        Matrix matrix = new Matrix();
        //        float left=200,top = 200,right = 400,bottom=400;
        //        float[] pointSrc = {left, top, right, top, left, bottom, right, bottom};
        //        float[] pointDst = {left - 10, top + 50, right + 120, top - 90, left + 20, bottom + 30, right + 20, bottom + 60};
        //        matrix.reset();
        //        matrix.setPolyToPoly(pointSrc,0,pointDst,0,4);
        //        canvas.concat(matrix);
        

 

  • 使用Camera来做三维变换
    • 旋转
    • 平移
    • 移动相机 Camera.setLocation(x, y, z) 设置虚拟相机的位置
      • 这种设计源自 Android 底层的图像引擎 Skia 。在 Skia 中,Camera 的位置单位是英寸,英寸和像素的换算单位在 Skia 中被写死为了 72 像素,而 Android 中把这个换算单位照搬了过来。是的,它。写。死。了。
      • Camera.setLocation(x, y, z) 的 x 和 y 参数一般不会改变,直接填 0 就好

posted on 2018-09-06 13:31  endian11  阅读(312)  评论(1)    收藏  举报

导航