画布矩阵变换

时间:2010-12-08 19:57:19

标签: java android matrix

我正在开发一款Android游戏。

我添加了按钮,允许用户在x轴上导航相机并放大和缩小。

为此,我使用以下矩阵代码:

// c is the canvas..
Matrix m = c.getMatrix();
// Make sure that the ground is always at the bottom of the screen
m.setScale(zoom,zoom,0.0f,height);
m.preTranslate(camera_x, 0); // Change offset in x-direction
c.setMatrix(m);

这适用于模拟器,但在我的真实设备上给了我一些奇怪的结果。

谁能告诉我它有什么问题?我发现使用矩阵很棘手,特别是因为Matrix对象有许多选项(pre,post和set)。

由于

1 个答案:

答案 0 :(得分:6)

您在View的onDraw方法中从canvas.getMatrix()获得的矩阵中已经有一些操作(将视图缩放到您的显示大小并将View的坐标转换为ViewRoot曲面坐标。

通过使用matric.setScale()而不是pre或postScale,您可以将矩阵重置为标识变换,然后应用缩放。这会导致onDraw的初始转换设置丢失。 matrix.preTranslate()没问题。

或者,您可以保留setScale并使用canvas.concat(m)将矩阵应用于现有矩阵。

(我无法保持前后应用转换的操作。)