您的位置:首页 > 产品设计 > UI/UE

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

2015-10-10 18:15 597 查看
一、直接使用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 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息