如何在Android中的View.Canvas上缩放位图?

l33*_*33t 3 android resolution bitmap scale

我有一个View派生类,在那里我绘制一个790x500(是的,这很奇怪,但它必须保持这种方式)直接在画布上的位图onDraw.这在我的Nexus S上看起来不错,但是当我在具有较小屏幕的设备上运行我的应用程序(例如Wildfire)时,我只看到位图的左上角部分.我在这里错过了什么?

这是一个类似游戏的应用程序,我在某些坐标上绘制了许多位图.我真的不想为LDPI,MDPI和HDPI设置不同的像素设置(我有充分的理由).

问:如何针对任何屏幕分辨率正确缩放我的位图?(将屏幕的游戏屏幕居中可能是一个选项,但不是必须的.)例如,当我在320x240屏幕上绘制800x600图像时,图像会自动拉伸,当我以100x100输出像素时,它会变为40x40.

Bit*_*ank 6

drawbitmap()方法有很多种形式.选择允许您指定源矩形和目标矩形的那个.源矩形将是位图的大小,目标矩形将缩放以适合设备显示.Android会在绘制位图时缩放您的位图.

Rect rs = new Rect();
Rect rd = new Rect();
rs.left = rs.top = 0;
rs.right = 789;
rs.bottom = 499;

<calculate destination rectangle from device size>

canvas.drawBitmap(myBitmap, rs, rd, null);
Run Code Online (Sandbox Code Playgroud)

您还可以缩放和转换(移动)整个画布

canvas.scale(float scaleX, float scaleY);
canvas.translate(float dx, float dy);
Run Code Online (Sandbox Code Playgroud)