從網絡url讀取圖片加載到imageview

首先涉及到幾點:

1.從url讀取圖片代碼(asyncTask)

2.生成圖片drawable並加載到imageview


首先,一個大大的imageview是必不可少的啦

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.read_image_from_url.MainActivity" >

    <ImageView
        android:id="@+id/imageview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </ImageView>

</RelativeLayout>


我們先寫好生成圖片drawable的方法

Drawable LoadImageFromWebOperations(String url) {
		InputStream is = null;
		Drawable d = null;
		try {
			is = (InputStream) new URL(url).getContent();
			d = Drawable.createFromStream(is, "src name");
			return d;
		} catch (Exception e) {
			return null;
		}
	}

以 http://www.123raw.com/includes/templates/custom/images/123raw_mainpic_01.jpg 爲例子,點擊打開鏈接,查看網頁源代碼看到的內容就是getcontent()得到的信息。

我們通過drawable.createFromStream便可將jpg生成drawable,將它返回到結果。

由於google不允許在主線程中訪問網絡,我們必須用到thread或者AsyncTask訪問網絡,而對於像圖片這樣的小case,還是用輕量級的asyncTask比較高效率。

class load_image extends AsyncTask<String, Void, Drawable> {

		@Override
		protected Drawable doInBackground(String... params) {
			Drawable drawable = LoadImageFromWebOperations(params[0]);
			return drawable;
		}

		@Override
		protected void onPostExecute(Drawable result) {
			super.onPostExecute(result);
			ImageView imageView = (ImageView) findViewById(R.id.imageview);
			imageView.setImageDrawable(result);
		}

	}

在這裏我們將url的地址以String的方式傳入,在AsyncTask中調用LoadImageFromWebOperation生成drawable。

由於AsyncTask中doInBackground的return方式傳遞的值是交給onPostExecute的,而onPostExecute則是將異步處理得到的結果通知給主線程的,所以我們將drawable傳遞給後者,在裏面聲明imageview並加載drawable。

當然,寫好這些之後,記得要在調用創建AsyncTask並啓動

new load_image().execute("http://www.123raw.com/includes/templates/custom/image/123raw_mainpic_01.jpg");
微笑希望對大家有幫助

發佈了35 篇原創文章 · 獲贊 5 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章