好的。我可能应该更清楚。在将缩放位图绘制到屏幕上之前,我需要缩放位图的高度和宽度,以便我可以在正确的位置绘制一些叠加层。我知道原始位图中叠加层的位置,但不知道缩放后的位置。我想出了一些简单的公式来计算它们应该在缩放位图上的位置。
我会解释一下我做了什么,以防有一天其他人可能需要这个。
我得到了位图的原始宽度和高度。 ImageView的高度和宽度被硬编码在xml文件中的335处。
int bitmap_width = bmp.getWidth();
int bitmap_height = bmp.getHeight();
我确定了哪一个更大,这样我就可以正确地找出计算的基础。对于我当前的示例,宽度较大。由于宽度缩小到 ImageView 的宽度,我必须找到缩小后的高度。我只是将 ImageView 的宽度与位图的宽度之比乘以位图的高度。除法最后进行,因为先进行整数除法会得到 0 的结果。
int scaled_height = image_view_width * bitmap_height / bitmap_width;
通过缩放后的高度,我可以使用以下方法确定缩放后的位图两侧的空白空间量:
int blank_space_buffer = (image_view_height - scaled_height) / 2;
为了确定缩放位图上叠加层的 x 和 y 坐标,我必须使用原始坐标和这些计算出的数字。本例中的 x 坐标很简单。由于缩放后的宽度是 ImageView 的宽度,因此我只需将 ImageView 的宽度与 Bitmap 的宽度之比乘以原始 x 坐标即可。
int new_x_coord = image_view_width * start_x / bitmap_width;
y 坐标有点棘手。取位图缩放后的高度与位图原始高度的比率。将该值与原始 y 坐标相乘。然后添加空白区域缓冲区。
int new_y_coord = scaled_height * start_y / bitmap_height + blank_space_buffer;
这适合我的需要。如果高度大于宽度,只需反转宽度和高度变量即可。