如果有Canvas.rotate(90),Canvas.drawPoint()无法正常工作?

时间:2012-03-29 10:56:18

标签: android

所以我正在制作一个自定义视图,显示一些图形(图表),在某些情况下,我想将画布旋转90度。
我只能猜到我的设备中存在一个错误(HTC Desire,安装了android 2.3),我还没有在另一台设备上测试它。

@Override
public void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    canvas.save();
    canvas.rotate((float) 90.0);
    canvas.drawPoint(10, 10, pointPaint); /* Sorry about missing that these
            * coordinates will fall out after being rotated... it's just an
            * example. put 10, -10 and it should work, but it doesn't */
    canvas.restore();
}

这不会说明这一点,但如果我们将90.0更改为90.014(我发现这是最小值,90.013也不起作用)那么这一点就会显示出来。

所以...这是我做错了什么,还是只是Android的错误?我google了很多,但什么都找不到......

-Victor -

编辑:附加信息:只有点不起作用。矩形,直线和圆形工作完美 编辑:我的应用程序的屏幕截图,你可以看到红线在90.014度版本上有点,而90.0没有: enter image description here

(正如你所看到的,90.014看起来有点翻转(你可以看到Y轴是如何'破碎')

2 个答案:

答案 0 :(得分:2)

画布旋转其原点,因此如果将画布旋转90度,则可以有效地将视图旋转出屏幕。您应该首先将画布转换为要旋转的轴:

canvas.save();
canvas.translate(-axispointx,-axispointy);
canvas.rotate((float) 90.0);
canvas.translate(axispointx,axispointy);
canvas.drawPoint(10, 10, pointPaint);
canvas.restore();

答案 1 :(得分:2)

设置点Paint以使用ROUND笔划上限可以解决问题,即使它还没有解释您遇到的奇怪行为。 e.g:

paint.setStrokeCap(Paint.Cap.ROUND)