同一張圖片從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());

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章