我想展示一张可以缩放、平移和随罗盘读数旋转的图片。使用下面的代码,这三个动作有点起到了作用,但它们会相互影响。
以下是我想要实现的目标:
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);
如果我先进行翻译,然后再旋转,那么翻译就按预期工作了,但旋转不再围绕视口中心。
我如何应用这三种变换,而不会相互影响?