Camera.rotate*() 一共有四个方法: rotateX(deg) rotateY(deg) rotateZ(deg) rotate(x, y, z)
canvas.save();camera.save(); // 保存 Camera 的状态 camera.rotateX(30); // 旋转 Camera 的三维空间 canvas.translate(centerX, centerY); // 旋转之后把投影移动回来 camera.applyToCanvas(canvas); // 把旋转投影到 Canvas canvas.translate(-centerX, -centerY); // 旋转之前把绘制内容移动到轴心(原点) camera.restore(); // 恢复 Camera 的状态 canvas.drawBitmap(bitmap, point1.x, point1.y, paint); canvas.restore();Canvas
的几何变换顺序是反的,所以要把移动到中心的代码写在下面,把从中心移动回来的代码写在上面。
2.3.2 Camera.translate(float x, float y, float z) 移动
它的使用方式和 Camera.rotate*() 相同,而且我在项目中没有用过它,所以就不贴代码和效果图了。
2.3.3 Camera.setLocation(x, y, z) 设置虚拟相机的位置注意!这个方法有点奇葩,它的参数的单位不是像素,而是 inch,英寸。
在 Camera 中,相机的默认位置是 (0, 0, -8)(英寸)。8 x 72 = 576,所以它的默认位置是 (0, 0, -576)(像素)。
如果绘制的内容过大,当它翻转起来的时候,就有可能出现图像投影过大的「糊脸」效果。而且由于换算单位被写死成了 72 像素,而不是和设备 dpi 相关的,所以在像素越大的手机上,这种「糊脸」效果会越明显。
而使用 setLocation() 方法来把相机往后移动,就可以修复这种问题。
camera.setLocation(0, 0, newZ);
Camera.setLocation(x, y, z) 的 x 和 y 参数一般不会改变,直接填 0 就好。
分享给小伙伴们:
本文标签: 自定义View,Android/">自定义View,Android
相关文章
发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。
本类最热新闻