從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());