setImageDrawable无法在没有资源图像的情况下正确缩放

时间:2013-12-13 19:28:22

标签: android

我正在尝试将存储在文件系统中的图像加载到imageButton中。但它没有正确缩放。可绘制资源和文件系统中的文件是相同的(t700.png),但结果是不同的。

这项工作很好:

button.setImageDrawable(getResources().getDrawable(R.drawable.t700));

此更改比例/大小并获得更大的图像:

String filePath = VideoActivity.this.getFilesDir()+File.separator+EPGApiService.LOGOS_DIR+File.separator+channel.getLogoFile();
Bitmap bitmap = BitmapFactory.decodeFile(filePath);
BitmapDrawable imgDrawable = new BitmapDrawable( this.getResources(),bitmap);
button.setImageDrawable(imgDrawable);

我需要相同的结果..

注意: 如果我做

BitmapDrawable logoBitmapDrawableFromDisk = new BitmapDrawable(VideoActivity.this.getResources(),logoBitmap);
BitmapDrawable logoBitmapDrawableFromDisk2 = new BitmapDrawable(logoBitmap);
BitmapDrawable logoBitmapDrawableFromRes = (BitmapDrawable) getResources().getDrawable(R.drawable.t700);

Drawables位图大小不一样!

logoBitmapDrawableFromDisk大小为410x123

logoBitmapDrawableFromDisk2大小为205x62

logoBitmapDrawableFromRes大小为820x246

真实文件是一样的。我在这两种方式上需要相同的尺寸。

1 个答案:

答案 0 :(得分:0)

BitmapDrawable(getResources(), bitmap)

  

从位图创建drawable,根据资源的显示指标设置初始目标密度。

它看起来更大,因为它使用资源对象将图像调整为屏幕密度。

为避免使用BitmapDrawable(bitmap)

或者调整png的大小,使其在mdpi设备中正确显示 然后BitmapDrawable(getResources(), bitmap)会在所有设备中为您提供正确的外观。

在所有设备中具有相同外观的正确方法是为每个设备密度创建不同的图标 从mdpi密度的维度开始。其他每个密度的尺寸应根据以下值计算:

hdpi乘以1.5
xhdpi乘以2
xxhdpi乘以3

每个图标都应放在具有相应名称的单独文件夹下,具体取决于密度:

mdpi - > RES / drawable_mdpi
hdpi - > RES / drawable_hdpi
xhdpi - > RES / drawable_xhdpi
xxhdpi - > res / drawable_xxhdpi

在xml中设置ImageButton源或使用getResources().getDrawable(R.drawable.t700);设备将自动选择正确的源。

有关详细信息,请参阅this