`

在ListView中显示网络图片

 
阅读更多

 

最近在做一个天气预报的例子,想在ListView中添加网络图片,在翻阅很多文档,在Baidu上Google很久,终于找到了办法,现在跟大家分享一下解决方案,此篇仅做一个比较简单的实例。

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

1
2
3
4
5
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处理的主要代码:

1
2
3
4
5
6
7
8
9
10
11
12
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
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;
    }
 
}

注意:此例是显示网络图片,要记得添加权限。

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

ListView显示图片效果图

 

http://www.android-study.com/pingtaikaifa/426.html

分享到:
评论

相关推荐

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

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

    C#在ListView中Subitem显示图片

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

    listView显示网络图片

    本文将深入探讨如何在ListView中实现网络图片的加载与显示,以及解决图片错乱的问题。 首先,我们需要一个图片加载库来帮助我们处理网络图片的下载和显示。在Android社区中,有多个流行的图片加载库可供选择,如...

    android ListView 加载网络图片

    在listview中显示网络图片,该类重写simpleadapter,让listview绑定该adapter

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

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

    Listview显示网络图片

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

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

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

    Android ListView从网络获取图片及文字显示

    从网络加载图片显示到listview上,主函数布局是一个ListView item布局是TextView和ImageView 数量的多少视情况而定 再写一个网络请求数据的类 最后面有代码: ”urlConnection 请求数据类的封装“ 类名一定要一样...

    listview加载网络图片的例子

    `这一行代码负责加载并显示网络图片。 当然,除了Picasso,还有其他如Glide、Fresco等优秀的图片加载库,它们都有各自的特点和优势。例如,Glide以其流畅的滚动和自动管理内存而受到欢迎,Fresco则提供了更高级的...

    listview加载多幅图片

    在Java(Android)中,可以创建Bitmap对象并将其添加到ImageView中,但通常我们会使用RecyclerView和Glide或Picasso库来加载网络图片。 2. **添加图片**:将图片添加到ImageList中,这可以通过读取本地文件或网络...

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

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

    listview加载网络图片

    "ListView加载网络图片"这个主题涉及到如何有效地在ListView的每个Item中加载和显示从互联网获取的图像,同时保持性能和用户体验。 在描述中提到,提供的代码资源可以解决大部分开发者遇到的头疼问题,即如何优化...

    ListView异步加载网络图片

    因此,"ListView异步加载网络图片"是一个重要的优化技巧。 异步加载的基本思路是将图片下载和显示的操作放在后台线程进行,避免占用主线程资源,确保UI的流畅。在Android中,可以使用多种方式实现这一目标,例如...

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

    然而,在实现ListView时,由于其内部机制,可能会出现一个问题,即ListView中的item(列表项)重用导致图片重复加载,这不仅会消耗不必要的网络资源,还可能影响用户体验。本文将深入探讨这个问题,并提供解决方案。...

    Listview显示图片优化

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

    AsyncTask_ListView实现加载网络图片例子

    接下来,我们将创建一个自定义的Adapter,它将负责加载网络图片并将其显示在ListView的每一项中。Adapter通常继承自BaseAdapter或ArrayAdapter,我们这里可以创建一个继承自BaseAdapter的类,包含一个List来存储图片...

    ListView加载网络图片(初级)

    这个场景中,我们讨论的是如何在ListView中加载网络图片,这是一个初级级别的教程。在实际应用中,我们需要考虑到性能和用户体验,比如避免图片错位和及时更新图片。这里我们将深入解析LruCache和AsyncTask在图片...

    listview获取网络图片缓存优化

    "listview获取网络图片缓存优化" 主要关注如何在ListView中高效地加载和缓存网络图片,以提升用户体验。 首先,我们需要理解ListView的工作原理。ListView通过复用ViewHolder中的视图来提高滚动性能。当一个item...

    Android高级应用源码-listview获取网络图片缓存优化.zip

    在Android开发中,ListView是展示大量数据常用的组件,但直接加载网络图片会遇到性能问题,如界面卡顿、内存溢出等。这个"Android高级应用源码-listview获取网络图片缓存优化.zip"是一个示例项目,旨在解决这些问题...

Global site tag (gtag.js) - Google Analytics