Android ListView顯示圖片
Android中ListView是比較常用的控件,但一直都覺(jué)得創(chuàng)建ListView步驟有點(diǎn)繁瑣,故在此總結(jié)一下,方便查閱。程序效果是實(shí)現(xiàn)一個(gè)ListView,ListView里面有標(biāo)題,內(nèi)容和圖片,并加入點(diǎn)擊和長(zhǎng)按響應(yīng)。大家知道ImageView 類雖然有一個(gè) setImageUri 方法,但不能直接接受一個(gè)由網(wǎng)絡(luò)地址生成的uri作為參數(shù)從而顯示圖片,我們只好使用其 setImageBitmap 方法,如
java代碼:
- Bitmap mBitmap = null;
- URL url = new URL(imageUrl);
- HttpURLConnection conn = (HttpURLConnection) url.openConnection();
- InputStream is = conn.getInputStream();
- mBitmap = BitmapFactory.decodeStream(is);
在SimpleAdapter中需要一個(gè)數(shù)據(jù)源,用來(lái)存儲(chǔ)數(shù)據(jù)的,在顯示圖片時(shí)我們要用HashMap<>存儲(chǔ)一個(gè)Bitmap;但僅存取了Bitmap時(shí)在ListView中是無(wú)法顯示圖片的,我們需要對(duì)SimpleAdapter進(jìn)行處理 。
如下是對(duì)SimpleAdaptr處理的主要代碼:
java代碼:
- adapter.setViewBinder(new ViewBinder() {
- public boolean setViewValue(View view, Object data,
- String textRepresentation) {
- //判斷是否為我們要處理的對(duì)象
- if(view instanceof ImageView && data instanceof Bitmap){
- ImageView iv = (ImageView) view;
- iv.setImageBitmap((Bitmap) data);
- return true;
- }else
- return false;
- }
- });
看API對(duì)Android.widget.SimpleAdapter.ViewBinder的解釋:
這個(gè)類可以利用外部客戶價(jià)值的觀點(diǎn)SimpleAdapter裝訂。你應(yīng)該使用這個(gè)類綁定值觀點(diǎn)不直接支持SimpleAdapter約束力或改變方式發(fā)生SimpleAdapter對(duì)于視圖支持。
你可以使用該類來(lái)處理SimpleAdapter不直接支持的數(shù)據(jù);
下面來(lái)看看完整的代碼:
main.xml 中就是一個(gè)ListView , list_item.xml 是為L(zhǎng)istView中控件提供布局 ,就是一個(gè)ImageView。主要代碼 MainActivity.Java
java代碼:
- package eoe.demo.listView;
- import java.io.IOException;
- import java.io.InputStream;
- import java.NET.HttpURLConnection;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import android.app.Activity;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.os.Bundle;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.widget.ImageView;
- import android.widget.ListView;
- import android.widget.SimpleAdapter;
- import android.widget.SimpleAdapter.ViewBinder;
- public class MainActivity extends Activity {
- ListView mListView;
- View mView;
- public static final String imageUrl = "自己想要的路徑";
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- mView = LayoutInflater.from(this).inflate(R.layout.list_item,null);
- mListView = (ListView) findViewById(R.id.mList);
- List<HashMap<String,Object>> mListData = getListData();
- SimpleAdapter adapter = new SimpleAdapter(this, mListData, R.layout.list_item,
- new String[]{"icon"}, new int[]{R.id.image});
- adapter.setViewBinder(new ViewBinder() {
- public boolean setViewValue(View view, Object data,
- String textRepresentation) {
- //判斷是否為我們要處理的對(duì)象
- if(view instanceof ImageView && data instanceof Bitmap){
- ImageView iv = (ImageView) view;
- iv.setImageBitmap((Bitmap) data);
- return true;
- }else
- return false;
- }
- });
- mListView.setAdapter(adapter);
- }
- public List<HashMap<String,Object>> getListData(){
- List<HashMap<String,Object>> list = new ArrayList<HashMap<String,Object>>();
- HashMap<String,Object> map = null;
- for(int i=0;i<5;i++){
- map = new HashMap<String, Object>();
- map.put("icon",getBitmap());
- list.add(map);
- }
- return list;
- }
- public Bitmap getBitmap(){
- Bitmap mBitmap = null;
- try {
- URL url = new URL(imageUrl);
- HttpURLConnection conn = (HttpURLConnection) url.openConnection();
- InputStream is = conn.getInputStream();
- mBitmap = BitmapFactory.decodeStream(is);
- } catch (MalformedURLException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- return mBitmap;
- }
- }
java代碼:
我們***就是要加上一句權(quán)限,我們來(lái)看看權(quán)限的代碼:
- <uses-permission android:name="android.permission.INTERNET">
對(duì)于android中的listview相信大家應(yīng)該都不陌生,也是比較常用的組件。希望本篇文章對(duì)你有幫助吧!
【編輯推薦】