首先涉及到幾點:
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 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");