`

ListView 中显示图片

阅读更多

大家知道ImageView 类虽然有一个 setImageUri 方法,但不能直接接受一个由网络地址生成的uri作为参数从而显示图片,我们只好使用其 setImageBitmap 方法,如

Bitmap mBitmap = null;  
     
URL url = new URL(imageUrl);  
              
HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
              
InputStream is = conn.getInputStream();  
              
mBitmap = BitmapFactory.decodeStream(is);  
 在SimpleAdapter中需要一个数据源,用来存储数据的,在显示图片时我们要用HashMap<>存储一个Bitmap;但仅存取了Bitmap时在ListView中是无法显示图片的,我们需要对SimpleAdapter进行处理 。

如下是对SimpleAdaptr处理的主要代码: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的解释:

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

package com.yin.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 = "http://www.google.com//ig/images/weather/mostly_sunny.gif";  
    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;  
    }  
}  
 
<uses-permission android:name="android.permission.INTERNET">  
 

分享到:
评论

相关推荐

    listview加载多幅图片

    为了在ListView中显示图片,我们需要借助额外的数据结构,如ImageList。ImageList是一个可以存储多张图片的容器,它可以被多个控件共享,比如ListView、TreeView等。在Android中,我们可以使用Adapter(如...

    C#在ListView中Subitem显示图片

    在给定的场景中,"C#在ListView中Subitem显示图片"是一个关于在ASP.NET Web应用程序中使用ListView控件来展示数据时,如何在Subitems中添加图像的功能。 ListView控件是ASP.NET 2.0引入的一种高度可定制的数据绑定...

    listview中显示真彩色的图片

    通常,我们会使用ImageView作为显示图片的容器。 2. 图片加载库:考虑到性能和内存管理,推荐使用如Glide、Picasso或Fresco这样的图片加载库。这些库能高效地加载图片,并有缓存机制,避免内存溢出。例如,使用...

    Android实现ListView异步加载图片

    在 loadDrawable 方法中,我们将加载完成的图片传递给 ImageCallback,以便在 ListView 中显示图片。 6. loadImageFromUrl 方法 loadImageFromUrl 方法是加载图片的核心方法。该方法使用 URLConnection 来加载图片...

    listView显示网络图片

    如果需要显示图片下载进度,可以使用`listener`接口: ```java Glide.with(context) .load(url) .listener(new RequestListener() { @Override public boolean onLoadFailed(@Nullable GlideException e, ...

    listview 添加图片效果显示,加文字搜索提示

    这个项目“listview 添加图片效果显示,加文字搜索提示”显然关注于如何在ListView中实现图文混排以及添加搜索功能。以下将详细讲解这两个关键知识点。 1. **图文混排**: 在ListView中显示图文混排的内容,通常...

    Android ListView控件显示数据库中图片

    在 ListView 控件中显示图片时,我们需要使用 ImageView 控件来显示图片,并使用 Bitmap 来存储图片数据。在 SimpleAdapter 中,我们需要对 ImageView 进行处理,使得图片可以正确地显示出来。 知识点7:布局文件的...

    Listview显示网络图片

    总之,"Listview显示网络图片"涉及到Android开发中的性能优化和用户体验设计。通过使用异步加载库如Glide,我们可以高效地在ListView中加载网络图片,同时保证应用的流畅性。同时,合理利用缓存和优化策略,可以...

    Listview显示图片优化

    本篇文章将深入探讨如何对ListView显示图片进行优化,确保流畅的用户体验。 1. 使用高效的图片加载库:对于ListView中的图片加载,推荐使用像Glide、Picasso或 Fresco 这样的第三方库。这些库具有智能缓存机制,能...

    C# 上传图片在ListView中显示

    将上传图片到ListView中且保存到指定文件夹下,以缩略图形式显示,且可以删除、浏览图片。

    c# winform ListView实现图片浏览

    在我们的场景中,我们可能只需要一列来显示图片,而其他列可以用来显示图片的描述或者其他相关信息。 实现图片浏览的关键在于设置ListView的视图模式。默认情况下,ListView是文本模式,但我们可以将其设置为...

    Android ListView扩展(图片+文字)

    本示例将深入讲解如何在ListView中实现图片和文字的结合显示,以增强用户体验。我们将使用Android Studio 3.1.4进行开发。 首先,理解ListView的基本概念。ListView是一种可滚动的视图,用于展示一个可变大小的数据...

    Listview显示网络图片demo--真正简单好用

    通过以上步骤,"Listview显示网络图片demo--真正简单好用"项目为我们提供了一个实用的解决方案,使得在ListView中加载网络图片变得高效且不易出错。开发者可以轻松地将这个Demo应用到自己的项目中,优化用户体验,...

    android解析网络图片并显示在listview

    以上就是Android解析网络图片并显示在ListView中的主要知识点,这些技术和实践对于任何需要动态加载图片的Android应用来说都是至关重要的。在实际开发中,应根据项目需求和性能要求选择合适的方法和库。

    关于listview item重用导致图片重复加载 图片重新请求

    综上所述,解决ListView中图片重复加载的关键在于正确使用图片加载库,如Android-Universal-Image-Loader,通过合理的缓存策略和管理图片加载生命周期,确保图片只加载一次,并在item重用时正确显示。这不仅可以提高...

    listview-图片居中显示

    本教程将详细讲解如何在ListView的LargeIcon模式下实现图片的居中显示,并提供两个示例以适应不同的项目需求。 首先,我们需要理解ListView的工作原理。ListView通过Adapter来绑定数据和视图,当数据源发生变化或...

    C# 使用ListView控件实现图片浏览器(源代码)

    它主要通过ListView中加载指定文件夹中所有图片并通过双击缩略图显示具体图片,是比较基础的C#图片打开代码,但是对学习C#初级同学和研究ListVie控件的同学非常有帮助. 免费资源,仅供分享与大家学习,希望对大家有所...

    listView显示图片

    在实际应用中,我们经常需要在ListView的每个Item中显示图片。然而,如果直接加载网络或本地的大图,可能会导致性能问题,如界面卡顿,用户体验下降。这篇内容将深入探讨如何在ListView中高效地显示图片。 首先,...

    android listview 高效显示网络图片,自定义listview布局

    然而,当ListView中的每一项都需要显示网络图片时,如果不进行优化,可能会导致性能问题,如界面卡顿、滚动不流畅等。这个问题的解决方法是高效地加载网络图片并自定义ListView的布局。 首先,我们需要了解异步加载...

    Android开发之listview优化+图片异步加载缓存+避免图片显示闪烁

    这些库支持内存和磁盘缓存,自动处理图片尺寸,避免OOM,并能优雅地处理图片的加载和显示。 2.3 **图片大小调整**:根据ImageView的实际大小裁剪或缩放图片,避免加载过大图片导致内存消耗。 **3. 图片缓存** 3.1...

Global site tag (gtag.js) - Google Analytics