同一张图片从res和Sd卡中读取显示大小不一样

 从res中显示的图片,系统会把它的密度默认为机器的密度,而从sd卡中读出的图片则默认为160dpi。因此在屏幕上显示的大小可能会不一样。解决办法:

1.根据手机的屏幕密度更改图片的大小。如手机屏幕密度为240dpi(hdpi),则可将图片的大小改变为240/160*原图大小,此时放在sd卡中再取出显示就和原来的图片放在res中取出显示一样。

2.应用中从sd卡中获取的图片,一般都是从网络上下载下来的,因此,获取资源时可将图片的宽、高一并获得,然后在程序中设置ImageView的宽高。

3.网上看到的,还没试,先保存下来。

1、得到资源目录下的drawable

BitmapDrawable drawable = (BitmapDrawable) getResources().getDrawable(R.drawable.test);

2、得到这个drawable的宽高

int w = drawable.getIntrinsicWidth();
int h = drawable.getIntrinsicHeight();

3、得到sdcard下目录的bitmap 

Bitmap bitmap = Bitmap.createScaledBitmap(BitmapFactory.decodeFile(testUrl), w, h, true);

// Bitmap.createScaledBitmap(Bitmap src, int dstWidth, int dstHeight, boolean filter) 这个方法就是核心方法  设置createScaledBitmap filter 为true 即可变位图

4、将bitmap转换成drawable

BitmapDrawable drawable =new BitmapDrawable(getResources() , bitmap);

5、将drawable的密度设置为本机密度 即:
drawable.setTargetDensity(getResources().getDisplayMetrics());