canvas矩阵变换

我正在开发一款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)。

谢谢

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

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

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

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