0

我的应用程序通过 HTTP 从服务器加载图像并将其保存到文件中。然后我使用这段代码来获取 Drawable 并查看它:

File f=new File(path);
if(f.exists()) {
    Bitmap bmp = BitmapFactory.decodeFile(f.getAbsolutePath());
    if(bmp!=null) {
        DisplayMetrics dm = m_activity.getResources().getDisplayMetrics();
        bmp.setDensity(dm.densityDpi);
        Drawable drawable=new BitmapDrawable(context.getResources(), bmp);
        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
        return drawable;
    }
}

它在三星 Galaxy S2 上运行良好。但在三星 Galaxy S4 上,这个图像太小了。例如:

在 S2 上:

SGS2

在 S4 上:

SGS4

我需要在具有各种显示分辨率的所有设备上平等地显示它。可能吗?如何实施?

4

3 回答 3

1

我想我可以帮助你。我自己也有同样的问题。您需要做的是找到这个新屏幕比旧屏幕大多少,首先获取设备的尺寸并将它们放入 widthOfStandardDevice 和 heightOfStandardDevice。一旦您知道新屏幕比旧屏幕大多少,您将制作两个乘数来将所有内容相乘。您现在可以说将位图的大小设置为 bitmap_width 和 bitmap_height。

DisplayMetrics displaymetrics = new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);

height = displaymetrics.heightPixels;

width = displaymetrics.widthPixels;

float widthMultiplier = width/widthOfStandardDevice;

float heightMultiplier = height/heightOfStandardDevice;

int bitmap_width = (int)(600 * widthMultiplier);

int bitmap_height = (int)(800 * heightMultiplier);
于 2013-08-04T21:50:20.763 回答
1

基本问题是具有更高分辨率的设备会使图像显得更小。您需要根据设备分辨率按比例缩放“固有”大小。

一个好的解决方案(正如 Sheldon 建议的那样)是使用Scaled Bitmap

于 2013-08-04T22:14:50.107 回答
1

您不必缩放位图,因为按比例放大意味着它将使用更多内存。

相反,您可以只告诉 imageView 您希望它有多大,并让它以您希望的确切大小显示位图(使用 dp)。

如果您确实希望自己设置位图大小,如果图像质量很重要,请查看链接,如果速度更重要,请查看此链接

于 2013-08-04T22:41:53.960 回答