1.做android 开发难免会遇到从
1.做android 开发难免会遇到从网上获取大量图片,比如大众点评apk 这是一个ListView组合控件实现的,左边就是图片显示,右边是文字描述。在滑动的时候需要加载大量图片。如果我们用一般的方法实现加载大量图片的话你可能会遇到OOM问题,因此,我们不得不找一个好方法避免这种问题------------Volley。
2.涉及到的android 技术:网络请求,图片下载,多级缓存,内存溢出,等。虽然android 都给我们提供了相应的方法和接口实现这些技术,但程序员每次去写不同的代码实现相同的功能未免做了多余的事情,因此,google工程师就给我们封装了一个jar 包-------Volley ,Volley里面实现了android 加载大量图片的优秀代码。接下来我们看看怎么用的。想要了解Volley 基础知识 请参考:Volley
相关知识。
3.Volley 用法很简单 3行代码就够了。
private VolleyImageLoader mImageLoader = null;
mImageLoader = new VolleyImageLoader(mContext);
mImageLoader.showImage(mImgView, ImagesUrl.imageThumbUrls[position],
200, 200, R.drawable.ic_launcher);
4.完整代码:/*
* @Title: GridViewAdapter.java
* @Copyright: Corporation. Ltd. Copyright 1998-2018, All rights reserved
* @Description: TODO
* @author: xjp
* @data: 2014年8月15日 下午4:39:36
* @version: V1.0
*/
package com.mktech.photowall;
import com.android.volley.RequestQueue;
import com.android.volley.mytools.VolleyImageLoader;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.Volley;
import com.android.volley.toolbox.ImageLoader.ImageListener;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
/**
* TODO
*
* @author xjp
* @data: 2014年8月15日 下午4:39:36
* @version: V1.0
*/
public class GridViewAdapter extends BaseAdapter {
private LayoutInflater mLayoutInflater = null;
private boolean isFirstLoad = false;
private ImageView mImgView = null;
private Context mContext = null;
private ImageLoader imageLoader = null;
private VolleyImageLoader mImageLoader = null;
public GridViewAdapter(Context context) {
// TODO Auto-generated constructor stub
mContext = context;
mLayoutInflater = LayoutInflater.from(context);
// RequestQueue mQueue = Volley.newRequestQueue(mContext);
// imageLoader = new ImageLoader(mQueue, new ImageCache());
mImageLoader = new VolleyImageLoader(mContext);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return ImagesUrl.imageThumbUrls.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return ImagesUrl.imageThumbUrls[position];
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if (convertView == null) {
convertView = mLayoutInflater.inflate(R.layout.photo_layout, null);
mImgView = (ImageView) convertView.findViewById(R.id.photo);
convertView.setTag(mImgView);
} else {
mImgView = (ImageView) convertView.getTag();
}
// loadImage(ImagesUrl.imageThumbUrls[position], mImgView);
mImageLoader.showImage(mImgView, ImagesUrl.imageThumbUrls[position],
200, 200, R.drawable.ic_launcher);
return convertView;
}
// private void loadImage(String url, final ImageView imageView) {
//
// ImageListener listener = ImageLoader.getImageListener(imageView, 0, 0);
// imageLoader.get(url, listener, 150, 150);
// }
}
5.完整工程下载
完整的工程代码