思路:先为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;@Overrideprotected 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;}@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int position) {return list.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic 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;}@Overrideprotected 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.csdn.net/A/E/5/2_piaopiaohu123.jpg"));bean.setBitmap(bitmap);bean.setNeedBar(false);publishProgress(); // 通知去更新UI}return null;}public void onProgressUpdate(Void... voids) {if (isCancelled()) {return;}// 更新UIadapter.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;}}





更多相关文章

  1. Android(安卓)OKHTTP 网络请求出错重连---http拦
  2. android network,gps定位切换
  3. android中延迟执行某个任务的几种处理方法
  4. android canvas实现在图片上画图
  5. Android(安卓)三种延迟操作的实现方法
  6. android4.4 Launcher主菜单界面同样采用背景图片的方式
  7. Android实现ImageView图片双击放大及缩小
  8. Android(安卓)图片大小超过预算的VM:java.lang.OutOfMemoryError:
  9. 高仿大众点评商家列表

随机推荐

  1. android VelocityTracker简单用法
  2. Android Layout xml 中的几个概念
  3. App自动更新之通知栏下载
  4. Android黑科技动态加载(二)之Android中的
  5. android 透明状态栏与沉浸式
  6. Kotlin 写 Android 单元测试(三),Mockito mo
  7. Android 学习
  8. Google Maps Android API v2初体验
  9. 深入理解 Android消息处理系统的原理
  10. [置顶] 【Android】 基于XMPP Smack框架