2011-11-21 69 views
3

以我的自定義視圖OnDraw方法我繪製BitmapCanvas的中心與自動縮放畫布以適應位圖

protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    Rect r = canvas.getClipBounds(); 
    displayWidth = r.right; 
    displayHeight = r.bottom; 
    camera.applyToCanvas(canvas); 
    float zW = (float)bitmapWidth/(float)displayWidth; 
    float zH = (float)bitmapHeight/(float)displayHeight; 
    float z = 0.0f; 
    if (zW>1 || zH>1) { 
     z = Math.max(zW, zH); 
    } 
    canvas.drawColor(Color.DKGRAY); 
    canvas.drawBitmap(bitmap, (displayWidth/2.0f - (bitmapWidth)/2.0f), (displayHeight/2.0f - bitmapHeight/2.0f), paint); 
    if (z>0) { 
     camera.translate(z, -z, z); 
    } 
} 

如果Bitmap是高度或寬度的變大則Canvas大小(displayWidth, displayHeight),如何使用Camera類自動縮放以適應Bitmap並將其居中置於Canvas。有任何想法嗎?

回答

0

嘗試創建一個矩陣實例,並使用

public boolean setRectToRect (RectF src, RectF dst, Matrix.ScaleToFit stf)

你需要這樣做只有一次,保持基質在內存初始化。請注意,Matrix.ScaleToFit定義了CENTER值。

後來,當你繪製位圖使用這個版本的drawBitmap的:

public void drawBitmap (Bitmap bitmap, Matrix matrix, Paint paint)

+0

有沒有幫助?讓我知道你是否需要更具體的代碼 –