一、直接使用Volley的imageR给listView加载网络图片:
1.创建MainActivity:
public class MainActivity extends Activity implements ViewPager.OnPageChangeListener {
private ListView mGoodsPictureListView; //商品listview控件
private GoodsPictureListAdapter mGoodsPictureListAdapter; //商品list适配器
private String[] mUrls; //网络图片地址数组
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*初始化图片listview和图片list资源数组*/
mGoodsPictureListView = (ListView) findViewById(R.id.goods_picture_listview);
/*创建和绑定适配器*/
mGoodsPictureListAdapter = new GoodsPictureListAdapter(this);
mGoodsPictureListView.setAdapter(mGoodsPictureListAdapter);
对应的布局文件在此省略
2.创建MyApplication,建立volley请求队列queues
public class MyApplication extends Application{
public static RequestQueue queues;
@Override
public void onCreate() {
super.onCreate();
queues = Volley.newRequestQueue(getApplicationContext());
}
public static RequestQueue getHttpQueues(){
return queues;
}
}
注意:在manifest中将application的name设置成MyApplication
3.创建GoodsPictureListAdapter适配器
public class GoodsPictureListAdapter extends BaseAdapter {
Context context;
private String[] mUrls;
public GoodsPictureListAdapter(Context context){
this.context = context;
/*网络获取图片urls地址数组*/
mUrls = new String[]{"http://img1.3lian.com/img13/c2/14/31.jpg","http://img4.imgtn.bdimg.com/it/u=4165359378,1174563998&fm=21&gp=0.jpg","http://img0.imgtn.bdimg.com/it/u=778619511,4035858907&fm=21&gp=0.jpg","http://img01.taopic.com/150417/240415-15041FPH510.jpg","http://img0.imgtn.bdimg.com/it/u=4084186897,3669281913&fm=15&gp=0.jpg"};
}
@Override
public int getCount() {
return mUrls.length*2;
}
@Override
public Object getItem(int position) {
return mUrls[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ImageView imageView;
if(convertView == null){
convertView = LayoutInflater.from(context).inflate(R.layout.goods_picture_listitem,null);
}
imageView = (ImageView)convertView.findViewById(R.id.goods_picture_listitem);
/*为防止异步加载图片出现错位,给每个imageview设置tag标签*/
imageView.setTag(mUrls[position%5]);
/*使用volley中的imageRequest创建请求,请求成功返回bitmap,设置imageview内容,失败,设置默认图片*/
ImageRequest request = new ImageRequest(mUrls[position%5],new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap bitmap) {
if(imageView.getTag() != null && imageView.getTag().equals(mUrls[position%5]))
imageView.setImageBitmap(bitmap);
//使图片扩大显示,使得宽(长)大于等于屏幕宽(长)
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
}
},0,0, Bitmap.Config.RGB_565,new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
imageView.setBackgroundResource(R.drawable.ic_launcher);
}
});
/*将请求加入到请求队列中*/
MyApplication.getHttpQueues().add(request);
/*获取图片后,给imageview设置动画*/
Animation layoutAnimation = AnimationUtils.loadAnimation(context,R.anim.listview_fade_scale_out);
imageView.startAnimation(layoutAnimation);
return convertView;
}
}
补充:
android listview 异步加载图片并防止错位
http://www.cnblogs.com/lesliefang/p/3619223.html