随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)
思路:先为ListView或者GridView等设置默认图片,然后启用异步线程下载网络图片然后更新adapter,刷新UI,代码如下:
MainActivity:
package com.home.asynload;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ListView;
public class MainActivity extends Activity {
private List<ImageBean> list = new ArrayList<ImageBean>();
private ImageAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initImage();
// 启动异步线程加载网络图片
new ImageLoadTask(adapter).execute();
}
/**
* 设置初始图片
*/
private void initImage() {
for (int i = 0; i < 10; i++) {
ImageBean bean = new ImageBean();
bean.setBitmap(BitmapFactory.decodeResource(getResources(),
R.drawable.ic_launcher));
list.add(bean);
}
adapter = new ImageAdapter(MainActivity.this, list);
ListView listView = new ListView(MainActivity.this);
listView.setAdapter(adapter);
adapter.notifyDataSetChanged();
setContentView(listView);
}
}
ImageAdapter:
package com.home.asynload;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
public class ImageAdapter extends BaseAdapter {
private Context context;
private List<ImageBean> list = new ArrayList<ImageBean>();
public ImageAdapter(Context context, List<ImageBean> list) {
this.context = context;
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup arg2) {
LinearLayout layout = new LinearLayout(context);
ImageView imageView = new ImageView(context);
layout.addView(imageView);
ImageBean bean = list.get(position);
if (bean.getBitmap() != null) {
imageView.setImageBitmap(bean.getBitmap());
}
if (bean.isNeedBar()) {
ProgressBar bar = new ProgressBar(context);
layout.addView(bar);
}
return layout;
}
}
ImageLoadTask:
package com.home.asynload;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
public class ImageLoadTask extends AsyncTask<Void, Void, Void> {
private ImageAdapter adapter;
public ImageLoadTask(ImageAdapter adapter) {
this.adapter = adapter;
}
@Override
protected Void doInBackground(Void... params) {
for (int i = 0; i < adapter.getCount(); i++) {
ImageBean bean = (ImageBean) adapter.getItem(i);
Bitmap bitmap = BitmapFactory
.decodeStream(getStream("http://avatar.profile.youkuaiyun.com/A/E/5/2_piaopiaohu123.jpg"));
bean.setBitmap(bitmap);
bean.setNeedBar(false);
publishProgress(); // 通知去更新UI
}
return null;
}
public void onProgressUpdate(Void... voids) {
if (isCancelled()) {
return;
}
// 更新UI
adapter.notifyDataSetChanged();
}
public InputStream getStream(String urlStr) {
InputStream inStream = null;
try {
URL url = new URL(urlStr);
URLConnection conn = url.openConnection();
conn.setConnectTimeout(10 * 1000);
inStream = conn.getInputStream();
} catch (Exception e) {
e.printStackTrace();
}
return inStream;
}
}
ImageBean:
package com.home.asynload;
import android.graphics.Bitmap;
public class ImageBean {
private Bitmap bitmap;
private boolean isNeedBar = true;
public ImageBean() {
super();
}
public boolean isNeedBar() {
return isNeedBar;
}
public void setNeedBar(boolean isNeedBar) {
this.isNeedBar = isNeedBar;
}
public Bitmap getBitmap() {
return bitmap;
}
public void setBitmap(Bitmap bitmap) {
this.bitmap = bitmap;
}
}