Android 缩放后获取可绘制的显示大小

Android 缩放后获取可绘制的显示大小,android,size,imageview,drawable,Android,Size,Imageview,Drawable,这是我的问题: 假设ImageView大小不等于缩放后的可绘制图形,如何在缩放后以像素为单位获取ImageView内部可绘制图形的显示大小 很多方法只返回可绘制对象的原始大小或ImageView的大小 下面是一张描述我想要什么的图片: 1-->图像视图大小 2-->我希望以像素为单位获得的缩放图像大小 谢谢。从您发布的图像中,我假设您的imageView上有FIT_CENTER(或CENTER_INSIDE,drawable大于imageView)的刻度类型 因此,您可以这样计算显示的大小

这是我的问题:
假设ImageView大小不等于缩放后的可绘制图形,如何在缩放后以像素为单位获取ImageView内部可绘制图形的显示大小

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

下面是一张描述我想要什么的图片:

1-->图像视图大小
2-->我希望以像素为单位获得的缩放图像大小


谢谢。

从您发布的图像中,我假设您的imageView上有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();
    }
注意:为了可读性,代码没有简化

可以应用于所有缩放类型的另一种更健壮的方法是使用imageView用于缩放图像的矩阵

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