【发布时间】:2012-05-04 09:24:48
【问题描述】:
我正在尝试展示一张图片,该图片可以缩放和平移,并且可以根据指南针读数进行旋转。使用下面的代码,所有三个操作都可以工作,但它们会相互影响。
这是我想要实现的目标:
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);
如果我先平移,然后再旋转,则平移会按预期进行,但旋转不再围绕视口中心。
我怎样才能应用所有三个转换而不相互影响?
【问题讨论】:
标签: android matrix android-canvas