我正在尝试展示一张可以缩放和平移的图片,并且可以通过指南针读数旋转。使用下面的代码,所有三个操作都可以工作,但它们会相互影响。
这是我想要实现的目标:
1. 围绕屏幕中心旋转
2. 缩放,将图片的相同部分留在中心
3. 平移到图片中的所需位置
以下是以下代码实际发生的情况:
1. 旋转按预期工作,围绕屏幕中心
2. 缩放有效,但它围绕图片中心缩放 3. 只有当为零时,
翻译才会按预期工作,否则angle
它朝着错误的方向发展
// the center of the view port
float centerX = screen.right/2;
float centerY = screen.bottom/2;
Matrix m = new Matrix();
m.preRotate(angle, centerX, centerY);
m.preScale(mScaleFactor, mScaleFactor, centerX, centerY);
// scaling the amount of translation,
// rotating the translation here gave crazy results
float x = mPosX / mScaleFactor;
float y = mPosY / mScaleFactor;
m.preTranslate(x, y);
canvas.drawBitmap(pic, m, null);
如果我先平移,然后再旋转,则平移会按预期工作,但旋转不再围绕视口的中心。
我怎样才能应用所有三种转换,而不会使它们相互影响?