請參閱以下各節,以三種不同方式描述我的問題。希望應該幫助人們回答。如何在放大時查找點擊的絕對位置
問題:你怎麼找到一雙帆布/用戶空間座標表示,當你只有座標縮放圖像來表示,考慮到原有規模點&比例因子?
問題在實踐中:
我目前正試圖複製應用程序中使用的變焦功能,如畫廊/地圖,當你可以捏放大/變焦朝中點移動縮小捏。
向下保存縮放的中心點(基於當前屏幕在X,Y座標中)。然後,我有檢測到「規模」手勢時該功能動作:
class ImageScaleGestureDetector extends SimpleOnScaleGestureListener {
@Override
public boolean onScale(ScaleGestureDetector detector) {
if(mScaleAllowed)
mCustomImageView.scale(detector.getScaleFactor(), mCenterX, mCenterY);
return true;
}
}
的CustomImageView的比例函數是這樣的:
public boolean scale(float scaleFactor, float focusX, float focusY) {
mScaleFactor *= scaleFactor;
// Don't let the object get too small or too large.
mScaleFactor = Math.max(MINIMUM_SCALE_VALUE, Math.min(mScaleFactor, 5.0f));
mCenterScaleX = focusX;
mCenterScaleY = focusY;
invalidate();
return true;
}
縮放後的圖像的附圖由重寫來實現onDraw方法,用於在畫布中心縮放畫布並將其繪製到其中。
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.save();
canvas.translate(mCenterScaleX, mCenterScaleY);
canvas.scale(mScaleFactor, mScaleFactor);
canvas.translate(-mCenterScaleX, -mCenterScaleY);
mIcon.draw(canvas);
canvas.restore();
}
這一切都從比例因子1縮放時工作得很好,這是因爲初始mCenterX和mCenterY是其基於在設備屏幕上的座標。 10,10在設備上是10,10在畫布上。
然而,在您已經放大之後,下次單擊位置10,10時,由於已經執行的縮放&轉換,它將不再對應於畫布中的10,10。
問題的抽象:
下面的圖像是圍繞中心點A.變焦操作的一個例子的每個框代表視圖的位置和大小時在該比例因子(1,2,3 ,4,5)。
在這個例子中,如果你以2圍繞A然後一個因子你上位置B點擊縮放,所述X,Y報道爲B將基於屏幕上的位置 - 而不是在相對於位置初始畫布的0,0。
我需要找到讓B.
的絕對位置
Android +設置樞軸點的標準視圖縮放比例不會完成這項工作嗎? –
不確定「標準視圖縮放和樞軸點設置」是什麼意思?如果你可以擴展,這將是偉大的。 – Graeme
我的意思是使用'setScaleX()'和'setScaleY(()'來縮放,'setPivotX()'和'setPivotY()'用於設置縮放的中心,它們都是View的方法,但是I只是讀了那些方法的minSdkVersion是11(蜂窩),所以如果你的目標是早期版本的話,這些信息對你來說可能是沒用的 –