从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());
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。