使用Volley的imageRequest加载图片实例(含listview异步加载图片错位问题)

来源:互联网 发布:汇编语言vb和c语言区别 编辑:程序博客网 时间:2024/06/06 17:50

一、直接使用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 


0 0