当ListView需要在线获取数据,并且列表中需要显示图片时,友好的处理方式是使用异步加载图片的方式。

这是因为LIstView中显示的内容是分为两部加载的,第一次加载文本信息(包含图片的uri地址),第二次使用图片的uri下载图片到本地显示。

如果一次性获取文本信息与图片,将要较长时间加载,用户等待太久。

以下为代码实现:

xml文件,list.xml

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent" >

<ListView

android:id="@+id/list"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_below="@+id/img_your_circle"

android:layout_marginBottom="50dp"

android:layout_marginLeft="13dp"

android:layout_marginRight="13dp"

android:divider="@null"

android:dividerHeight="5dp"

android:fadingEdge="none"

android:listSelector="@android:color/transparent"

android:scrollbars="none" >

</ListView>

</RelativeLayout>

list_item.xml文件:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="@drawable/layout_background"

android:padding="10dp" >

<RelativeLayout

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignBottom="@+id/txt_icon"

android:layout_alignLeft="@+id/txt_icon"

android:layout_alignRight="@+id/txt_icon"

android:layout_alignTop="@+id/txt_icon"

android:layout_centerVertical="true" >

<ProgressBar

android:id="@+id/progressBar"

style="?android:attr/progressBarStyleSmall"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerInParent="true" />

</RelativeLayout>

<ImageView

android:id="@+id/txt_icon"

android:layout_width="90dp"

android:layout_height="90dp"

android:scaleType="fitXY"

android:visibility="invisible" />

<TextView

android:id="@+id/txt_title"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_alignParentTop="true"

android:layout_alignTop="@+id/txt_icon"

android:layout_marginLeft="5dp"

android:layout_marginRight="5dp"

android:layout_toLeftOf="@+id/imageView1"

android:layout_toRightOf="@+id/txt_icon"

android:ellipsize="end"

android:maxLines="2"

android:minLines="2"

android:textColor="#000000" />

<TextView

android:id="@+id/txt_content"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_alignBottom="@+id/txt_icon"

android:layout_alignLeft="@+id/txt_title"

android:layout_alignRight="@+id/txt_title"

android:ellipsize="end"

android:maxLines="2"

android:minLines="2" />

<ImageView

android:id="@+id/imageView1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentRight="true"

android:layout_centerVertical="true"

android:src="@drawable/list_arrow" />

</RelativeLayout>

java文件,ListActivity.java

public class ListActivity extends Activity {

.....

@Override

protected void onCreate(Bundle savedInstanceState) {

setContentView(R.layout.list);

super.onCreate(savedInstanceState);

list = (ListView) findViewById(R.id.list);

getResource();

}

class AppsAdapter extends BaseAdapter {
@Override
public int getCount() {
return myList.size();
}
@Override
public Object getItem(int position) {
return myList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ArticleResponse app = myList.get(position);
ImageView del = null;
if (convertView == null) {
LayoutInflater inflater = getLayoutInflater();
convertView = inflater.inflate(
R.layout.goldencircle_innercircle_list_item, parent,
false);
}
TextView txt_title = (TextView) convertView
.findViewById(R.id.txt_title);
txt_title.setText(app.pagetitle);
TextView txt_content = (TextView) convertView
.findViewById(R.id.txt_content);
String teaser = app.teaser;
if (teaser != null && teaser.trim().length() > CONTENT_LENGHT)
teaser = teaser.substring(0, CONTENT_LENGHT) + "...";
txt_content.setText(teaser);
ImageView icon = (ImageView) convertView
.findViewById(R.id.txt_icon);
icon.setTag(position);
icon.setVisibility(View.INVISIBLE);
if (app.bitmap != null) {
icon.setVisibility(View.VISIBLE);
icon.setImageBitmap(app.bitmap);
} else if (!app.flag) {
new ImageLoadTask(GoldenCircleInnerCircleListActivity.this,
position, icon).execute();
app.flag = true;
}
return convertView;
}
}
public class ImageLoadTask extends AsyncTask<Void, Void, Void> {
private int position;
private ImageView image;
public ImageLoadTask(Context context, int position, ImageView image) {
this.position = position;
this.image = image;
}
@Override
protected Void doInBackground(Void... params) {
ArticleResponse app = myList.get(position);
if (app.thumb != null && app.thumb.trim().length() > 0) {
Drawable dr = AsyncImageLoader.loadCacheImageFromUrl(app.thumb);
Bitmap bitmap = null;
if (dr != null) {
bitmap = new WeakReference<Bitmap>(
((BitmapDrawable) dr).getBitmap()).get();
}
app.flag = dr != null;
app.bitmap = bitmap;
publishProgress();
}
return null;
}
public void onProgressUpdate(Void... voids) {
if (isCancelled())
return;
int p = Integer.valueOf(image.getTag().toString());
if (p != position)
return;
ArticleResponse app = myList.get(position);
image.setImageBitmap(app.bitmap);
image.setVisibility(app.bitmap != null ? View.VISIBLE
: View.INVISIBLE);
}
}

list项中加入圆形进度条,在图片还未加载完时,进度条一直在滚动,当图片显示时,将遮住它。

转载于:https://www.cnblogs.com/linvaluable/archive/2012/08/13/2637271.html

Android 开发笔记 ListView异步加载图片相关推荐

  1. Android开发之ListView异步加载图片

    ListView这个控件对于大家肯定不会陌生,即使你是初学者相信也会用ListView.因为ListView这个控件实在是太常用,可以说基本上每一个项目开发都会用到它,今天这篇博客主要讲解,ListV ...

  2. android开发小技巧:实现listview异步加载图片

    2019独角兽企业重金招聘Python工程师标准>>> 针对listview异步加载图片这个问题,麦子学院android开发老师讲了一种非常实用的方法,麦子学院android开发老师 ...

  3. Android实现ListView异步加载图片

    转: http://www.iteye.com/topic/685986 ListView异步加载图片是非常实用的方法,凡是是要通过网络获取图片资源一般使用这种方法比较好,用户体验好,下面就说实现方法 ...

  4. Android ListView异步加载图片乱序问题,原因分析及解决方案

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/45586553 在Android所有系统自带的控件当中,ListView这个控件算是 ...

  5. Android实现ListView异步加载图片总结

    参考自http://blog.csdn.net/wanglong0537/article/details/6334005# http://www.cnblogs.com/slider/archive/ ...

  6. 又优化了一下 Android ListView 异步加载图片

    写这篇文章并不是教大家怎么样用listview异步加载图片,因为这样的文章在网上已经有很多了,比如这位仁兄写的就很好: http://www.iteye.com/topic/685986 我也是因为看 ...

  7. Android ListView 异步加载图片

    使用ListView.GridView来展示图片是项目中经常遇到的情况,这里使用官方文档的BitmapFun稍作修改实现ListView 异步加载图片效果. 实现原理:给ListView 注册一个 滚 ...

  8. android listview 异步加载图片并防止错位

    网上找了一张图, listview 异步加载图片之所以错位的根本原因是重用了 convertView 且有异步操作. 如果不重用 convertView 不会出现错位现象, 重用 convertVie ...

  9. ListView异步加载图片,完美实现图文混排

    昨天参加一个面试,面试官让当场写一个类似于新闻列表的页面,文本数据和图片都从网络上获取,想起我还没写过ListView异步加载图片并实现图文混排效果的文章,so,今天就来写一下,介绍一下经验. Lis ...

最新文章

  1. java oracle行锁,Oracle 出现行锁 错误代码 ora-02049
  2. 以太坊区块链_以太坊区块链搭建与使用(一)-私有链
  3. vue2.x 综合教程 一
  4. 海量数据处理之倒排索引
  5. 博图程序需要手动同步_贴吧求助帖博图实例单按钮控制灯的程序
  6. vba copy sheet
  7. ArcGIS AO开发高亮显示某些要素
  8. SDL2源代码分析1:初始化(SDL_Init())
  9. [Linux + 深度学习]Ubuntu18.04 深度学习环境配置
  10. 東京タワー初めてphoto
  11. 1-4-05:整数大小比较
  12. SQL教程1_数据库及SQL语言基础知识
  13. coreELEC ceemmc 写入 cm311-1a 刷机排坑 Armbian 搞机篇
  14. vue 实现二维码 vue-qart 和 qrcodejs2
  15. 双纵坐标绘图-Plotyy
  16. SQL注入时order by 后面加数字的作用
  17. 数据库 流量切分_基于hash计算的多层实验流量切分的实现
  18. 安卓开发环境教程!史上最强vue总结来了,大厂直通车!
  19. al输入标题自动写作
  20. 操作系统实验四:C++实现独占设备的分配与回收算法模拟

热门文章

  1. 【面试必备】javascript的原型和继承
  2. 记录网页爬虫注意的几个问题
  3. 阿里云前端周刊 - 第 11 期
  4. 关于spring事务管理
  5. HDU2699+Easy
  6. php中区分大小写的超全局变量总结
  7. Glide-源码分析(一)
  8. 通俗易懂详解Java代理及代码实战
  9. 与 Linux 一起学习:学习地理
  10. 【云栖大会】基因计算:解读生命的力量