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);
- Matrix做变换的常见方式
- 使用Camera来做三维变换
- 旋转
- 平移
- 移动相机 Camera.setLocation(x, y, z) 设置虚拟相机的位置
- 这种设计源自 Android 底层的图像引擎 Skia 。在 Skia 中,Camera 的位置单位是英寸,英寸和像素的换算单位在 Skia 中被写死为了 72 像素,而 Android 中把这个换算单位照搬了过来。是的,它。写。死。了。
Camera.setLocation(x, y, z)的x和y参数一般不会改变,直接填 0 就好
Dana.Lee
To:Dana_Lee1016@126.com
浙公网安备 33010602011771号