Android 自动缩放画布以适应位图

Android 自动缩放画布以适应位图,android,canvas,Android,Canvas,在我的自定义视图OnDraw方法中,我使用 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

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

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);
    }
}

如果
位图
的高度或宽度大于
画布
的大小(
displayWidth,displayHeight
),如何使用
Camera
类自动缩放以适应
位图
并将其居中放置在
画布
上。有什么想法吗?

尝试创建一个矩阵实例,并使用

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

您只需执行一次,并将矩阵保存在内存中。请注意,
Matrix.ScaleToFit
定义
CENTER

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

public void drawBitmap(位图、矩阵、油漆)