在Android运行时获取ImageDrawable的尺寸

在Android运行时获取ImageDrawable的尺寸,android,image,Android,Image,我已经在android(纵向模式)中设置了Imageview的背景,其尺寸为400 X 400像素。这张图片在10英寸WXGA MDPI平板电脑(尺寸800 X 1280)上看起来非常完美。我碰巧在7英寸Nexus 7(TVDPI 800 X 1280)平板电脑上使用了相同的布局,代码没有修改。这张图片看起来像被拉伸了。我可以通过编程在Nexus7的布局中找到背景的尺寸吗?我想在数学上缩小背景的尺寸,使其看起来像一个正方形。我觉得图像背景的宽度看起来超过400像素(比如X),高度也超过400像素

我已经在android(纵向模式)中设置了Imageview的背景,其尺寸为400 X 400像素。这张图片在10英寸WXGA MDPI平板电脑(尺寸800 X 1280)上看起来非常完美。我碰巧在7英寸Nexus 7(TVDPI 800 X 1280)平板电脑上使用了相同的布局,代码没有修改。这张图片看起来像被拉伸了。我可以通过编程在Nexus7的布局中找到背景的尺寸吗?我想在数学上缩小背景的尺寸,使其看起来像一个正方形。我觉得图像背景的宽度看起来超过400像素(比如X),高度也超过400像素(比如Y)。还有Y>X,这使它看起来像一个矩形。如何在Nexus7上的android中以编程方式找到X和Y?请帮忙。是否有一套公式可以缩小或放大图像,使所有android手机的外观保持一致。谢谢

下面的代码将允许您获取图像的宽度并相应地缩放它

 try { 

       DisplayMetrics displaymetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        SCREEN_WIDTH = displaymetrics.widthPixels;
        Drawable ob = new BitmapDrawable(getResources(), bm);
        float h = ob.getMinimumHeight();
        float w = ob.getMinimumWidth();
        float Hight = (h / w) *SCREEN_WIDTH;
        imageView.setVisibility(View.VISIBLE);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT, (int) Hight);
        // imageView.setImageBitmap(bitmap);
        params.setMargins(5, 5, 5, 5);
        imageView.setLayoutParams(params);
        int sdk = android.os.Build.VERSION.SDK_INT;
        if (sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
            imageView.setBackgroundDrawable(ob);
        } else {
            imageView.setBackground(ob);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
试试{
DisplayMetrics DisplayMetrics=新的DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
屏幕宽度=displaymetrics.widthPixels;
Drawable ob=新的位图Drawable(getResources(),bm);
float h=ob.getMinimumHeight();
float w=ob.getMinimumWidth();
浮动高度=(高/宽)*屏幕宽度;
设置可见性(View.VISIBLE);
LinearLayout.LayoutParams params=新的LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT(int)high);
//设置图像位图(位图);
参数设置边距(5,5,5,5);
imageView.setLayoutParams(参数);
int sdk=android.os.Build.VERSION.sdk\u int;
if(sdk
您是否尝试过在xml中使用android:scaleType=“centerInside”而不是手动计算图像的大小?您可以设置
ImageView
的大小(以dp为单位),以便在不同屏幕上保持一致的大小。
scaleType
将确保在缩放时保持纵横比。如果要防止缩放并在drawables xxx文件夹中放置不同大小的图像,也可以使用android:scaleType=“center”