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

标签 android bitmap scale resolution

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

这是一个类似游戏的应用程序,我可以在其中在特定坐标上绘制许多位图。我真的不想为 LDPI、MDPI 和 HDPI 设置不同的像素(我有一个很好的理由)。

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

最佳答案

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

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

关于android - 如何在 Android 的 View.Canvas 上缩放位图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9144213/

相关文章:

安卓 : Maximum allowed width & height of bitmap

ffmpeg - 如何调整视频大小 720 :1280 Bigger Height, 宽度和裁剪为 1280 :720 using ffmpeg?

javascript - OpenLayers 4 中如何根据比例进行缩放?

android - 在 Qt Android 项目中使用 OpenCV 时的链接顺序

java - Android Studio GCM 注册 ID 显示为空

android - Android ImageButton 背景的挑战

iphone - 缩放图像非常慢 - 帮助

java - 在 Activity 中单击按钮时在回收器 View 和 fragment 之间切换

android - 如何检查网络和 WI-FI 可用性

android - 将 XML 布局转换为位图图像时, ListView 项目未显示