android - 自动缩放 Canvas 以适合位图

标签 android canvas

在我的自定义 View 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 类自动缩放以适应 Bitmap 并将其置于 Canvas 中心。有什么想法吗?

最佳答案

尝试创建一个 Matrix 实例并使用

对其进行初始化

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

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

稍后当您绘制位图时使用此版本的 drawBitmap:

public void drawBitmap(Bitmap位图,Matrix矩阵,Paint画图)

关于android - 自动缩放 Canvas 以适合位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8206312/

相关文章:

android - ArrayAdapter 只显示一条记录

android - 复合 XML 形状

android - 可扩展 ListView 图标已删除但仍占用空白空间

java - 与多个 Activity 共享抽屉导航

android - 如何将 AnimationDrawable 放置在 SurfaceView Canvas 上

javascript - Base64 SVG 图像

javascript - 尝试在 JavaScript 中加载时绘制图像

android - 在 Flutter 中调整手机亮度

javascript - Canvas - 高度自行调整 - Sketch.js

javascript - HTML5 将 Canvas 保存到服务器上的文件