Android ListView顯示圖片
Android中ListView是比較常用的控件,但一直都覺得創(chuàng)建ListView步驟有點繁瑣,故在此總結(jié)一下,方便查閱。程序效果是實現(xiàn)一個ListView,ListView里面有標(biāo)題,內(nèi)容和圖片,并加入點擊和長按響應(yīng)。大家知道ImageView 類雖然有一個 setImageUri 方法,但不能直接接受一個由網(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中需要一個數(shù)據(jù)源,用來存儲數(shù)據(jù)的,在顯示圖片時我們要用HashMap<>存儲一個Bitmap;但僅存取了Bitmap時在ListView中是無法顯示圖片的,我們需要對SimpleAdapter進(jìn)行處理 。
如下是對SimpleAdaptr處理的主要代碼:
java代碼:
- adapter.setViewBinder(new ViewBinder() {
- public boolean setViewValue(View view, Object data,
- String textRepresentation) {
- //判斷是否為我們要處理的對象
- if(view instanceof ImageView && data instanceof Bitmap){
- ImageView iv = (ImageView) view;
- iv.setImageBitmap((Bitmap) data);
- return true;
- }else
- return false;
- }
- });
看API對Android.widget.SimpleAdapter.ViewBinder的解釋:
這個類可以利用外部客戶價值的觀點SimpleAdapter裝訂。你應(yīng)該使用這個類綁定值觀點不直接支持SimpleAdapter約束力或改變方式發(fā)生SimpleAdapter對于視圖支持。
你可以使用該類來處理SimpleAdapter不直接支持的數(shù)據(jù);
下面來看看完整的代碼:
main.xml 中就是一個ListView , list_item.xml 是為ListView中控件提供布局 ,就是一個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) {
- //判斷是否為我們要處理的對象
- 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)限,我們來看看權(quán)限的代碼:
- <uses-permission android:name="android.permission.INTERNET">
對于android中的listview相信大家應(yīng)該都不陌生,也是比較常用的組件。希望本篇文章對你有幫助吧!
【編輯推薦】