canvas教程

Android中自定义View(4)(2)

字号+ 作者:H5之家 来源:H5之家 2017-11-13 14:03 我要评论( )

Camera.rotate*() 一共有四个方法: rotateX(deg) rotateY(deg) rotateZ(deg) rotate(x, y, z) canvas.save();camera.save(); // 保存 Camera 的状态 camera.rotateX(30); // 旋转 Camera 的三维空间 canvas.transl

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

相关文章

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

  • 本类最热新闻

  •  

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • android surfaceView 的简单使用 画图,拖动效果

      android surfaceView 的简单使用 画图,拖动效果

      2017-11-11 09:01

    • Android的边缘效应的相关类EdgeEffectCompat学习

      Android的边缘效应的相关类EdgeEffectCompat学习

      2017-11-05 16:05

    • Android canvas.drawBitmap()画出来的图片是按dp而不是像素?

      Android canvas.drawBitmap()画出来的图片是按dp而不是像素?

      2017-10-30 10:00

    • Android Canvas编程:对rotate()和translate()两个方法的研究

      Android Canvas编程:对rotate()和translate()两个方法的研究

      2017-10-29 11:40

    网友点评