缩放后获得可绘制的显示尺寸

时间:2013-02-06 09:51:11

标签: android size imageview drawable

这是我的问题:
假设ImageView大小不等于缩放的drawable,如何在scalling之后获取ImageView中可绘制的drawable的显示大小?

许多方法只返回Drawable的原始大小或仅返回ImageView的大小。

这是描述我想要的图片:

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

1 - > ImageView尺寸
2 - >我希望在px中获得的缩放图像大小

谢谢。

1 个答案:

答案 0 :(得分:2)

从您发布的图片中我假设您在ImageView上有scaleType为FIT_CENTER(或者CENTER_INSIDE,其drawable大于imageView)

所以你可以像这样计算显示的尺寸

    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();
    }

注意:为了便于阅读,代码未简化。

可应用于所有scaleTypes的另一种更强大的方法是使用imageView用于缩放图像的矩阵

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