我有Canvas
和Bitmap
。我必须在画布上两次绘制位图并旋转它们。这是我的代码:
Bitmap bitmap = ... ;
Matrix matrix = new Matrix();
Camera camera = new Camera();
camera.save();
// First drawing:
camera.rotateX(x_rotate_angle);
camera.rotateY(y_rotate_angle);
camera.getMatrix(matrix);
matrix.postTranslate(0, 0);
matrix.postScale(3, 3);
canvas.drawBitmap(bitmap, matrix, null);
camera.restore();
// Second drawing:
camera.rotateX(x_rotate_angle);
camera.rotateY(y_rotate_angle);
camera.getMatrix(matrix);
matrix.postTranslate(10, 10 + bitmap.getHeight());
matrix.postScale(3, 3);
canvas.drawBitmap(bitmap, matrix, null);
轮换前的结果:
当位图仅旋转 X轴时,一切都很好。在这种情况下,结果如下所示:
在上面两张图片中,您可以看到所有边都是parallel
。但是当位图旋转轴Y 时,边缘将不会平行(顶部位图的下边缘穿过底部的顶边)位图):
我做错了吗?
答案 0 :(得分:4)
您没有做错任何事情,只是因为您无法理解您将从代码中获得的结果。您正在使用的相机是3D相机,您可以看到在3D空间中移动相机的效果。旋转摄像机时,平行线通常不会保持平行。您在围绕y轴旋转时注意到了这个工件,但它在图示中也出现了x轴旋转。请注意,对于x轴,左侧和右侧不平行;左侧比右侧更接近垂直。
Android canvas
对象具有缩放,倾斜,平移和旋转操作。如果您需要2D操作,则可以完全抛弃camera
对象。