所以我正在制作一个自定义视图,显示一些图形(图表),在某些情况下,我想将画布旋转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没有:
(正如你所看到的,90.014看起来有点翻转(你可以看到Y轴是如何'破碎')
答案 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)