Imageview在部分机器上oppo find 5等系列高分辨率机器上缩小的Bug解决
Imageview在部分机器上oppo find 5等系列高分辨率机器上缩小的Bug解决
今天出现了个Bug,布局中的Imageview在某些高分辨率机器上出现莫名其妙缩小情况。比如分辨率为1920×1080像素上出现缩小。图片非常小。不知道为什么。首先我的解决方法是不断的更改Imageview的参数感觉是不是参数出的问题呢?发现怎么改都不不管用。尝试使用判断分辨率的方法。直接设置高低,这样导致失真拉伸严重,被同组其他人不赞成这种使用方法。于是开始做实验,将图片下载到R.drawalble文件里显示正常,是什么原因导致不正常的呢?最后发现问题了。类《BitmapManager有Bug》里面有个方法 private void getFromSDCard(Context context, String url, ImageView imageView, int width, int height) {
String fileName = getFileName(url);
File file = new File(ImageUtil.ImageCachePath, fileName);
FileInputStream fis;
try
{
fis = new FileInputStream(file);
// Drawable d = Drawable.createFromStream(fis, "pic");
TypedValue value = new TypedValue();
Options options = new Options();
options.inTargetDensity = value.density;
options.inDensity = value.density;
options.inSampleSize = 1;
options.inScaled = false;
Drawable d = Drawable.createFromResourceStream(context.getResources(), value, fis, "src", options);
putBitmapToCache(url, d);
imageView.setImageDrawable(d);
System.out.println("set imager Resuouts success ...lixiaodaoaaa...");
} catch (FileNotFoundException e)
{
e.printStackTrace();
}
}
我们在开发过程中经常要将sd卡或网络图片加载为Drawable来使用。有很多人为了方便使用
Drawable.createFromStream(stream, "src")。
但是使用这个方法有一个问题:相同的图片,一个使用drawable id来配置的,另一个通过createFromStream(stream, "src")来加载显示的图片变小。这是因为createFromStream(stream, "src")加载图片的drawable,会默认当然mdpi的手机来处理。而drawable id加载图片时,会根据当前手机的dpi来加载图片。drawable id的图片放在hdpi时,显示的图片大小就不同了。但是,可以使用另外一个函数。
Drawable.createFromResourceStream(context.getResources(), null, stream, "src", null),它可以根据当前手机dpi来加载图处。最后解决问题。