5
我試圖展示一張圖片,該圖片可以放大和平移,並且可以隨着指南針讀數旋轉。通過下面的代碼,所有這三種行爲都是有用的,但它們相互影響。在Android畫布中同時旋轉,平移和縮放位圖
這裏是我想達到的目標:
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);
如果我翻譯第一,後來旋轉的作品,翻譯作品如預期,但旋轉不在身邊中心視圖端口了。
如何應用所有三種轉換,而不會相互影響?
旋轉翻譯似乎只是抵消旋轉,但我也有這種感覺,這就是我需要d。 Android矩陣是3x3,所以我猜他們已經是仿射變換? – modemuser
那麼也許嘗試直接設置矩陣,而不是使用preRotate,preScale方法?所以你的矩陣應該像 – Dan
以上的帖子中的編輯一樣。使用此矩陣,平移可以工作,但縮放也會旋轉圖片,旋轉也會縮放圖片,旋轉發生在圖片的一角。這就像whac-a-mole,但是感謝你的輸入。 – modemuser