关于画布canvas的rotate()和translate()的正确理解

来源:互联网 发布:网络教育第二本科证书 编辑:程序博客网 时间:2024/06/03 21:54

本以为已经理解了rotate和translate,但看过Android Canvas编程:对rotate()和translate()两个方法的研究 这篇文章后,发现原来以前的理解是一个误区。


关于手机屏幕的可视范围

可见范围永远都是x/y轴正方向交汇的地方。


关于rotate

假设现在我们的布局在没有进行旋转时是这样滴:紫色是我们的画布,即描绘控件的区域,红色方块是我们的控件,布局在屏幕的左上角。


那么,这样对红色控件在onDraw中进行canvas.rotate(-90) 是什么效果呢?正确的理解是把坐标系按照原点逆时针旋转。
那么,执行该方法后,会是这样子滴。这时,我们的画布,即控件已经超出了我们的可视范围,为了使我们可见,需要对canvas进行平移。


关于translate

canvas.translate(dx,dy) 是怎么移动的呢。
我们的移动还是针对画布的。当translate里面的x值为负数时,画布将往左移动;y值为负数时,往上移动。
那么,为了让控件旋转后能出现在我们的视野中,需要对控件的画布进行canvas.translate(-getHeight(),0)
其中,getHeight是控件的高度。









0 0