ListView 显示缩略图
- package com.lostinai;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import android.app.Activity;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.graphics.BitmapFactory.Options;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.View;
- import android.widget.AdapterView;
- import android.widget.ImageView;
- import android.widget.ListView;
- import android.widget.SimpleAdapter;
- import android.widget.AdapterView.OnItemClickListener;
- import android.widget.SimpleAdapter.ViewBinder;
- public class ListviewtutuActivity extends Activity {
- private ListView lv;
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.home);
- lv = (ListView)findViewById(R.id.h_list_view);
- setViews();
- lv.setOnItemClickListener(new OnItemClickListener(){
- public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
- long arg3) {
- Log.e("lostinai","lostinai");
- }
- });
- }
- private void setViews() {
- SimpleAdapter adapter = new SimpleAdapter(this, getDatas() ,R.layout.message_list
- , new String[]{"icon","title","shortContent"}, new int[]{R.id.ml_icon,R.id.ml_title,R.id.ml_short_content});
- lv.setAdapter(adapter);
- adapter.setViewBinder(new ViewBinder() {
- public boolean setViewValue(View arg0, Object arg1,
- String textRepresentation) {
- if ((arg0 instanceof ImageView) & (arg1 instanceof Bitmap)) {
- ImageView imageView = (ImageView) arg0;
- Bitmap bitmap = (Bitmap) arg1;
- imageView.setImageBitmap(bitmap);
- return true;
- } else {
- return false;
- }
- }
- });
- }
- private List<Map<String,Object>> getDatas() {
- List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
- for (int i=1; i<=12; i++) {
- Map<String,Object> map = new HashMap<String,Object>();
- String imagePath = "/sdcard/"+2+".jpg";
- // 图片压缩
- Bitmap bm = null;
- Options op = new Options();
- op.inSampleSize = 5;
- op.inJustDecodeBounds = false;
- bm = BitmapFactory.decodeFile(imagePath, op);
- map.put("icon",bm);
- map.put("title", "My Title "+i);
- map.put("shortContent", "my short content "+i);
- list.add(map);
- }
- return list;
- }
- }
home.xml文件如下
- <?xml version="1.0" encoding="utf-8"?>
- <ListView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/h_list_view"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- />
message_list.xml如下
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content">
- <ImageView android:id="@+id/ml_icon"
- android:layout_width="50dp"
- android:layout_height="58dp"
- android:src="@drawable/ic_launcher"
- />
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="wrap_content"
- android:layout_height="58dp"
- android:layout_weight="1">
- <TextView android:id="@+id/ml_title"
- android:layout_width="fill_parent"
- android:layout_height="25dp"
- android:textStyle="bold"
- android:textSize="20dp"
- />
- <TextView android:id="@+id/ml_short_content"
- android:layout_width="fill_parent"
- android:layout_height="35dp"
- />
- </LinearLayout>
- <TextView
- android:layout_width="30dp"
- android:layout_height="58dp"
- android:text=">"
- android:textSize="26dp"
- android:layout_gravity="right"
- android:gravity="center"
- />
- </LinearLayout>
ImageView 上显示缩略图
- //通过openRawResource获取一个inputStream对象
- InputStream inputStream = getResources().openRawResource(R.drawable.temp);
- //通过一个InputStream创建一个BitmapDrawable对象
- BitmapDrawable drawable = new BitmapDrawable(inputStream);
- //通过BitmapDrawable对象获得Bitmap对象
- Bitmap bitmap = drawable.getBitmap();
- //利用Bitmap对象创建缩略图
- bitmap = ThumbnailUtils.extractThumbnail(bitmap, 51, 108);
- //imageView 显示缩略图的ImageView
- imageView.setImageBitmap(bitmap);
SimpleAdapter 支持Bitmap
Unable to decode stream: java.io.FileNotFoundException: /android.graphics.Bitmap open failed: ENOEN
Unable to decode stream: java.io.FileNotFoundException: /android.graphics.Bitmap(或是 imageview XXXXX / Drawable )这类错误 可能是由于 使用的adapter不支持图形所导致的,需要从写Adapter ;
============
现在刚学android 好多东西还不是很清楚,所以在上面这个问题上纠结了 好几天 ,我使用的是SimpleAdapter ,而simpleAdapter 并不支持bitmap或是 imageview 默认的只是支持ImageView的id
要想使用SimpleAdapter支持imageView 或 bitmap
有两种方法:
一:
- SimpleAdapter listAdapter = new SimpleAdapter( 参数省略);
- listAdapter.setViewBinder(new ViewBinder() {
- @Override
- public boolean setViewValue(View view, Object attentionList, String textRepresentation) {
- // TODO Auto-generated method stub
- if(view instanceof ImageView && attentionList instanceof Bitmap){
- ImageView iv=(ImageView)view;
- iv.setImageBitmap((Bitmap) attentionList);
- return true;
- }else{
- return false;
- }
- }
- });