自动缩放画布以适合位图

时间:2011-11-21 01:23:35

标签: android canvas

在我的自定义视图OnDraw方法中,我使用

Bitmap绘制到Canvas的中心
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类自动缩放以适应{ {1}}并将其居中于Bitmap。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

尝试创建Matrix实例并使用

对其进行初始化

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

您只需要执行一次此操作并将矩阵保留在内存中。请注意Matrix.ScaleToFit定义CENTER值。

稍后绘制位图时,请使用此版本的drawBitmap:

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