[英]Zooming in android - keep image in view
我知道實際上有很多線程可以實現捏縮放-但是我已經走了這么遠。
我正在使用SimpleScaleGestureListener來處理縮放。 我已經設法確保您不能縮小到比將圖像高度與屏幕尺寸相同(因此,您的圖像高度將始終至少是可用屏幕尺寸的高度)更遠。
但是,我正在尋找一種自動檢測圖像是否在這些邊界之外平移的方法。 就像顯示圖像的標准android方法一樣。 因此,如果我放大並平移圖像,然后縮小,我希望它檢測圖像底部何時到達屏幕底部,然后縮放的“樞軸”相應地進行調整,因此永遠不允許圖像上方或下方的空白”。 誰能幫我?
供參考,這是我的onScale和onDraw方法:
public boolean onScale(ScaleGestureDetector detector){
float minScale = (float) ((float) SCREEN_SIZE.y / (float) DRAWABLE_SIZE.y);
mScaleFactor *= detector.getScaleFactor();
mScaleFactor = Math.max(minScale, Math.min(mScaleFactor, 5.0f));
invalidate();
return true;
}
protected void onDraw(Canvas canvas) {
canvas.save();
canvas.drawColor(Color.DKGRAY);
canvas.translate(mPosX, mPosY);
canvas.scale(mScaleFactor, mScaleFactor, getDrawable().getIntrinsicWidth() / 2,
getDrawable().getIntrinsicHeight() / 2);
this.getDrawable().draw(canvas);
canvas.restore();
}
您可以使用android.graphics.Matrix轉換繪制的位圖。 Matrix既包含縮放比例又包含平移。
您只需將矩陣應用於畫布:canvas.setMatrix
您可以輕松計算所需矩形的適合屏幕大小:
Matrix.setRectToRect
其中source是圖像(位圖)的實際分辨率矩形,左側/頂部為0,0,右側底部為width / heght。 dst是將在其中繪制位圖的目標視圖的矩形。
然后,您也可以解決任務-知道將在哪里繪制圖像的邊框。 Matrix.mapRect將計算您的位圖矩形(如前所述)在屏幕坐標中出現在屏幕上的位置。 然后,您可以簡單地在相對於屏幕的左側繪制圖像左側的位置,頂部/右側/底部相同。
我不會給您代碼,只是提示要走的路。 我最近用捏縮放,適合屏幕顯示,動畫過渡等方式對圖像查看器進行了編碼,所有這些操作都是使用Matrix及其相關操作完成的。
一個簡單的解決方案是使用此小部件
http://blog.sephiroth.it/2011/04/04/imageview-zoom-and-scroll/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.