1. 程式人生 > >Android基礎篇之在ListView中顯示網路圖片

Android基礎篇之在ListView中顯示網路圖片

http://blog.csdn.net/y13872888163/article/details/6434001

最近在做一個天氣預報的例子,想在ListView中新增網路圖片,在翻閱很多文件,在Baidu上Google很久,終於找到了辦法,現在跟大家分享一下解決方案,此篇僅做一個比較簡單的例項;

大家知道ImageView 類雖然有一個 setImageUri 方法,但不能直接接受一個由網路地址生成的uri作為引數從而顯示圖片,我們只好使用其 setImageBitmap 方法,如

  1. Bitmap mBitmap = null;  
  2. URL url = new URL(imageUrl);  
  3. HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
  4. InputStream is = conn.getInputStream();  
  5. mBitmap = BitmapFactory.decodeStream(is);  

     在SimpleAdapter中需要一個數據源,用來儲存資料的,在顯示圖片時我們要用HashMap<>儲存一個Bitmap;但僅存取了Bitmap時在ListView中是無法顯示圖片的,我們需要對SimpleAdapter進行處理 。

如下是對SimpleAdaptr處理的主要程式碼:

  1. adapter.setViewBinder(new ViewBinder() {  
  2.             publicboolean setViewValue(View view, Object data,  
  3.                     String textRepresentation) {  
  4.                 //判斷是否為我們要處理的物件
  5.                 if(view instanceof ImageView  && data instanceof Bitmap){  
  6.                     ImageView iv = (ImageView) view;  
  7.                     iv.setImageBitmap((Bitmap) data);  
  8.                     returntrue;  
  9.                 }else
  10.                 returnfalse;  
  11.             }  
  12.         });  

看API對android.widget.SimpleAdapter.ViewBinder的解釋:

This class can be used by external clients of SimpleAdapter to bind values to views. You should use this class to bind values to views that are not directly supported by SimpleAdapter or to change the way binding occurs for views supported by SimpleAdapter.

你可以使用該類來處理SimpleAdapter不直接支援的資料;

下面來看看完整的程式碼:

main.xml 中就是一個ListView  , list_item.xml 是為ListView中控制元件提供佈局 ,就是一個ImageView。這兩個比較簡單,不貼出程式碼

主要程式碼   MainActivity.java

  1. package com.yin.listView;  
  2. import java.io.IOException;  
  3. import java.io.InputStream;  
  4. import java.net.HttpURLConnection;  
  5. import java.net.MalformedURLException;  
  6. import java.net.URL;  
  7. import java.util.ArrayList;  
  8. import java.util.HashMap;  
  9. import java.util.List;  
  10. import android.app.Activity;  
  11. import android.graphics.Bitmap;  
  12. import android.graphics.BitmapFactory;  
  13. import android.os.Bundle;  
  14. import android.view.LayoutInflater;  
  15. import android.view.View;  
  16. import android.widget.ImageView;  
  17. import android.widget.ListView;  
  18. import android.widget.SimpleAdapter;  
  19. import android.widget.SimpleAdapter.ViewBinder;  
  20. publicclass MainActivity extends Activity {  
  21.     ListView mListView;  
  22.     View mView;  
  23.     publicstatic final String imageUrl = "http://www.google.com//ig/images/weather/mostly_sunny.gif";  
  24.     publicvoid onCreate(Bundle savedInstanceState) {  
  25.         super.onCreate(savedInstanceState);  
  26.         setContentView(R.layout.main);  
  27.         mView = LayoutInflater.from(this).inflate(R.layout.list_item,null);  
  28.         mListView = (ListView) findViewById(R.id.mList);  
  29.         List<HashMap<String,Object>> mListData = getListData();  
  30.         SimpleAdapter adapter = new SimpleAdapter(this, mListData, R.layout.list_item,  
  31.                                 new String[]{"icon"}, newint[]{R.id.image});  
  32.         adapter.setViewBinder(new ViewBinder() {  
  33.             public boolean setViewValue(View view, Object data,  
  34.                     String textRepresentation) {  
  35.                 //判斷是否為我們要處理的物件
  36.                 if(view instanceof ImageView  && data instanceof Bitmap){  
  37.                     ImageView iv = (ImageView) view;  
  38.                     iv.setImageBitmap((Bitmap) data);  
  39.                     returntrue;  
  40.                 }else
  41.                 returnfalse;  
  42.             }  
  43.         });  
  44.         mListView.setAdapter(adapter);  
  45.     }  
  46.     public List<HashMap<String,Object>> getListData(){  
  47.         List<HashMap<String,Object>> list = new ArrayList<HashMap<String,Object>>();  
  48.         HashMap<String,Object> map = null;  
  49.         for(int i=0;i<5;i++){  
  50.             map = new HashMap<String, Object>();  
  51.             map.put("icon",getBitmap());  
  52.             list.add(map);  
  53.         }  
  54.         return list;  
  55.     }  
  56.     public Bitmap getBitmap(){  
  57.         Bitmap mBitmap = null;  
  58.         try {  
  59.             URL url = new URL(imageUrl);  
  60.             HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
  61.             InputStream is = conn.getInputStream();  
  62.             mBitmap = BitmapFactory.decodeStream(is);  
  63.         } catch (MalformedURLException e) {  
  64.             e.printStackTrace();  
  65.         } catch (IOException e) {  
  66.             e.printStackTrace();  
  67.         }  
  68.         return mBitmap;  
  69.     }  
  70. }  

注意:此例是顯示網路圖片 要記得新增許可權 

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