获取绘制显示尺寸缩放后缩放、尺寸

2023-09-08 00:12:22 作者:再见再也不见

下面是我的问题: 怎样才能获得绘制的显示尺寸的ImageView的内侧scalling后像素,假设ImageView的大小并不等于比例绘制?

here's my problem: How can get the displayed size of the drawable inside an ImageView in pixel after scalling, assuming that the ImageView size isn't equal to the scaled drawable?

很多方法只返回绘制对象的原始大小或ImageView的只是大小。

A lot of methods just return the original size of the Drawable or just the size of the ImageView.

下面是图片说明是我想要的:

Here is a picture describing what I want :

http://image.noelshack.com/fichiers/ 2013/06/1360144144-SANS-titre.png

1 - > ImageView的大小 2 - >我想在像素缩放后的图像尺寸

1 --> ImageView Size 2 --> The scaled image size that I want to get in px

感谢你。

推荐答案

从您发布的图片我假设你有FIT_CENTER的scaleType(或CENTER_INSIDE比ImageView的绘制大)在您的ImageView

From the image you posted I assume you have scaleType of FIT_CENTER (or CENTER_INSIDE with drawable bigger than imageView) on your ImageView

这样你就可以计算出像这样显示尺寸

so you can calculate displayed size like so

    boolean landscape = imageView.getWidth() > imageView.getHeight();

    float displayedHeight;
    float displayedWidth;

    if (landscape){
        displayedHeight = imageView.getHeight();
        displayedWidth = (float) drawableWidth * imageView.getHeight() / drawableHeight;
    } else {
        displayedHeight = (float) drawableHeight * imageView.getWidth() / drawableWidth;
        displayedWidth = imageView.getWidth();
    }

注:code没有简化,可读性

Note: code not simplified for readability.

这可被应用到所有scaleTypes另一个更健壮的方法是使用的ImageView用于缩放图像的矩阵

Another more robust approach that can be applied to all scaleTypes is to use the matrix that imageView used to scale the image

float[] f = new float[9];
imageView.getImageMatrix().getValues(f);
float displayedWidth = drawableWidth * f[Matrix.MSCALE_X];
float displayedHeight = drawableHeight * f[Matrix.MSCALE_Y];