2010-01-02 151 views
3

html.fromhtml如何從web加載圖片並設置爲imageview?android html.fromhtml從網頁加載圖片

+1

你能澄清,如果這是你的問題嗎? 「我們如何從網上下載圖像並將其顯示在Android'ImageView'中?」 – 2010-01-02 13:29:34

+0

我已經刪除了舊的答案,並添加了一個處理異步需求的答案。請讓我知道,如果你有任何問題。 – Ally 2010-01-02 21:41:57

回答

11

異步圖片下載

首先要做的是確保你請求允許下載清單文件內的圖像。

<uses-permission android:name="android.permission.INTERNET" /> 

然後,要從網上下載圖像,我們需要打開HTTP連接,下載並返回圖像。這種方法應該放在活動中。

private Bitmap DownloadImage(String URL) 

然後我們便下載的圖像添加到ImageView的

Bitmap bitmap = DownloadImage("http://www.streetcar.org/mim/cable/images/cable-01.jpg"); 
ImageView img = (ImageView) findViewById(R.id.img); 
img.setImageBitmap(bitmap); 

然而,這不是異步。

通常我們會創建一個線程來完成一些後臺工作,但是線程無法更新它沒有創建的視圖。

要解決這個問題,我們可以使用AsyncTask。我寫了這個擴展AsyncTask的小內部類。

class DownloadImagesTask extends AsyncTask<String, Integer, Bitmap> { 

private int imageViewID; 

    protected void onPostExecute(Bitmap bitmap1) { 
    setImage(imageViewID, bitmap1); 
} 

    public void setImageId(int imageViewID) { 
     this.imageViewID = imageViewID; 
    } 

    @Override 
    protected Bitmap doInBackground(String... url) { 
     Bitmap bitmap1 = 
      DownloadImage(url[0]); 
     return bitmap1; 
    } 

}

通過的AsyncTask使用的三種類型是

  1. PARAMS,在執行時發送給任務的參數 的類型。
  2. 進度,後臺計算期間發佈的進度單位的類型。
  3. 結果,後臺計算結果的類型。

所以,以取代舊的代碼,我們現在可以使用

DownloadImagesTask task1 = new DownloadImagesTask(); 
task1.setImageId(R.id.img1); 
task1.execute("http://assets.devx.com/articlefigs/39810_1.jpg"); 

這得到了很多的時間比我的計劃。代碼不完美,但我希望它對你有所幫助。

注:這是基於Connecting to the web在DevX

參考

+0

這看起來不錯,但是當我使用自定義listview的代碼時,每個listitem都有一個行圖標圖像,並且正在執行新的異步任務以顯示每個行圖標的圖像。 但是圖像沒有在第一行的第二行和第二行圖像顯示適當的第一行圖像爲什麼雖然我通過imageview引用asyntask但仍然有同樣的問題。 – 2010-01-03 06:23:32

+0

那麼你最初的問題解決了嗎?我不確定發生了什麼事。如果你想讓我看看你的新問題,然後張貼一些代碼。 :) – Ally 2010-01-03 19:44:29

+0

很好的答案,謝謝! – Hamy 2010-12-04 04:01:02