2011-07-08 92 views
2

我已將預分頻位圖設置爲ImageView的源。然後我讀了ImageView的Matrix,並通過matrix.postTranslate(shiftX, shiftY)轉換ImageView的位圖。在保持中心點在同一位置的同時縮放ImageView的圖像

現在我想放大/縮小圖像,同時保持ImageView的中心位於比例縮放之前的位圖的同一點。

如果我嘗試放大matrix.postScale(zoom, zoom)的圖像,請指出我想保持(藍點)轉移到其他位置(紫點)。

我已經嘗試了幾種不同的方法來移回位圖,但我不能讓它正常工作。我知道初始位圖大小,ImageView大小,用虛線標記的距離。試圖計算所需的班次,然後使用matrix.postTranslate(-zoomshiftX, -zoomshiftY),但它沒有正確移動。

甚至發現,基礎位圖的像素數在matrix.postScale()函數後並沒有改變,並嘗試了matrix.postTranslate(-zoomshiftX/zoom,-zoomshiftY/zoom) - 但仍然沒有運氣。

如何實現這種縮放?

scalling issue

+0

I h通過使用4個參數matrix.postScale()併爲最後兩個參數輸入View_width/2和View_height/2之類的東西,實現了居中放大。沒有意識到這些最後兩個參數可能引用視圖的像素,而不是位圖 – wilkas

回答

0

也許這會有所幫助:

如果你有在屏幕上兩個手指,就可以得到兩個手指的事件,並獲得中間點:

PointF mid; 
MotionEvent event; 
float x = event.getX(0) - event.getX(1); 
float y = event.getY(0) - event.getY(1); 
mid.set(x/2, y/2); 

然後您可以設置屏幕中間點的中點:

matrix.postScale(scale, scale, mid.x, mid.y); 
相關問題