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

时间:2012-02-04 20:21:49

标签: android bitmap scale resolution

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

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

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

2 个答案:

答案 0 :(得分: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);

您还可以缩放和翻译(移动)整个画布

canvas.scale(float scaleX, float scaleY);
canvas.translate(float dx, float dy);

答案 1 :(得分:0)

Canvas.scale()可以解决问题。