1. 程式人生 > >Android顯示從網路下載圖片偏小的問題

Android顯示從網路下載圖片偏小的問題

在從網路上下載圖片時發現圖片偏小,原來以為是BitmapFactory.decodeStream時BitmapFactory.Options的選擇問題,但是試過了很多方法,達不到理想效果,後來發現是BitmapDrawable的使用問題,使用了BitmapDrawable(Bitmap bitmap)的構造方法,其實應該使用的是BitmapDrawable(Resources res, Bitmap bitmap),看註釋應該明白:

    /**
     * Create drawable from a bitmap, setting initial target density based on
     * the display metrics of the resources.
     */

BitmapDrawable(Bitmap bitmap)本身是個Deprecated的方法,它沒有制定resources,就不知道螢幕的解析度,那麼mTargetDensity就用預設值DisplayMetrics.DENSITY_DEFAULT = 160,就會導致圖片解碼不合適。
用BitmapDrawable(Resources res, Bitmap bitmap)就可以了。
下面附上網路下載圖片的兩種方法:

try {
    String url = params[0];
    InputStream inputStream = new URL(url).openStream();
    BitmapFactory.Options decodeOptions = new
BitmapFactory.Options(); decodeOptions.inPreferredConfig = Bitmap.Config.ARGB_8888; decodeOptions.inDensity = 0; Bitmap bitmap = BitmapFactory.decodeStream(inputStream,null, decodeOptions); return new BitmapDrawable(getResources(), bitmap); } catch (Exception e) { e.printStackTrace(); } return
null;
try {
    URL url = new URL(params[0]);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setConnectTimeout(5 * 1000);
    conn.setRequestMethod("GET");
    if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){
        InputStream inStream = conn.getInputStream();
        BitmapFactory.Options decodeOptions = new BitmapFactory.Options();
        decodeOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;
        decodeOptions.inDensity = 0;
        Bitmap bitmap = BitmapFactory.decodeStream(inStream,null, decodeOptions);
        return new BitmapDrawable(getResources(), bitmap);
    }
} catch (Exception e) {
    e.printStackTrace();
}
return null;