2011-08-05 138 views
5

我在圖像視圖控件中有圖像。由於圖像的x和y座標連續變化,用戶可以對該圖像執行平移和縮放。有沒有什麼方法可以找出圖像內部圖像控制的當前設置的x和y座標?任何有關它的代碼都會更有益。如何獲取圖像控件中位圖圖像的x和y座標?

+1

檢查出來此鏈接可能會有所幫助..... http://stackoverflow.com/questions/2447564/detect-touch-on-bitmap – Uttam

回答

11

ImageView使用Matrix類來進行縮放(縮放)和平移(平移)。如果您可以獲得矩陣,那麼您可以檢索放大/平移視圖的(左側,頂部)座標。

代碼的可縮放的&可平移延伸的ImageView是在計算器的一個posts

在該職位可你會看到擴展的ImageView類有矩陣用於縮放/平移一個成員變量。

您可以使用以下代碼從矩陣中獲取縮放/平移的ImagevIew(實際上是位圖)的界限。

RectF r = new RectF(); 
matrix.mapRect(r); 
Log.i(TAG, "Rect " + r.left + " " + r.top + " " + r.right + " " + r.bottom + " " + mOverAllScale + " "); 

新添加的答案

要了解下面的代碼,你需要去通過這個link和理解。

翻譯

當用戶拖曳圖像時,屏幕座標(絕對)和位圖的座標不同步。 [您寫入位圖的任何內容都通過畫布顯示(在onDraw())]如果應用着色,用戶會看到它在位圖圖像上的不同區域上應用。要糾正這個問題,你需要做翻譯。該翻譯會將用戶輸入座標(屏幕座標)更改爲位圖座標(如用戶所期望的) 以下代碼段將幫助您進行翻譯。

讓用戶輸入座標爲(X,Y)的話,

RectF r = new RectF(); 
matrix.mapRect(r); 
Log.i(TAG, "Rect " + r.left + " " + r.top + " " + r.right + " " + r.bottom + " " + mOverAllScale + " "); 
float newX = x - r.left; 
float newY = y - r.top; 

你代替(X,Y)採用新的座標。

縮放(縮放)

當用戶捏輸入/輸出;位圖會縮小/放大。您必須注意原始位圖不會更改,縮放只能從顯示角度進行。 這又導致屏幕和位圖之間的同步丟失。屏幕上的着色應該反映在顯示的圖像中。 以下代碼片段可以幫助您進行縮放。

// mScalingFactor shall contain the scale/zoom factor 
float scaledX = (event.getX() - r.left); 
float scaledY = (event.getY() - r.top); 

scaledX /= mScalingFactor; 
scaledY /= mScalingFactor; 

詞shash

+0

感謝詞shash。請讓我知道你的發現。 –

+0

編輯答案 – Shash316

+0

非常感謝Shash。 –

相關問題