3.Glide使用之ListAdapter加载图片篇

首先先介绍最简单的列表图片加载(单个ImageView元素)
最简单的图库样式列表
1.定义数据源(这里上传了一些网络图片)

public static String[] eatFoodyImages = {
        "http://i.imgur.com/rFLNqWI.jpg",
        "http://i.imgur.com/C9pBVt7.jpg",
        "http://i.imgur.com/rT5vXE1.jpg",
        "http://i.imgur.com/aIy5R2k.jpg",
        "http://i.imgur.com/MoJs9pT.jpg",
        "http://i.imgur.com/S963yEM.jpg",
        "http://i.imgur.com/rLR2cyc.jpg",
        "http://i.imgur.com/SEPdUIx.jpg",
        "http://i.imgur.com/aC9OjaM.jpg",
        "http://i.imgur.com/76Jfv9b.jpg",
        "http://i.imgur.com/fUX7EIB.jpg",
        "http://i.imgur.com/syELajx.jpg",
        "http://i.imgur.com/COzBnru.jpg",
        "http://i.imgur.com/Z3QjilA.jpg",
};

2.Activity 创建一个Adapter和ListView

public class UsageExampleAdapter extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_usage_example_adapter);

        listView.setAdapter(new ImageListAdapter(UsageExampleAdapter.this, eatFoodyImages));
    }
}

3.ListView的item布局(这里只是为了实例,图片展示可能不是最佳的展现方式)

<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
       android:layout_width="match_parent"
       android:layout_height="200dp"/>

4.定制Adapter

public class ImageListAdapter extends ArrayAdapter {
    private Context context;
    private LayoutInflater inflater;

    private String[] imageUrls;

    public ImageListAdapter(Context context, String[] imageUrls) {
        super(context, R.layout.listview_item_image, imageUrls);

        this.context = context;
        this.imageUrls = imageUrls;

        inflater = LayoutInflater.from(context);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (null == convertView) {
            convertView = inflater.inflate(R.layout.listview_item_image, parent, false);
        }

        Glide
            .with(context)
            .load(imageUrls[position])
            .into((ImageView) convertView);

        return convertView;
    }
}

虽然和常规的加载图片的方式没什么区别,但需要注意的是,在ListView中我们一般会需要复用布局的View来创造更快更平滑的用户体验。此处Glide会自动取消图片的请求,清除图片复用,加载正确合适的图片显示ImageView上。

强调一点:当你上下滚动列表时,你会发现图片比第一次加载快很多,更新时,图片加载几乎不需要时间。不用猜了,这些图片来自于缓存,不会再次从网络加载。
Glide的缓存实现是基于Picasso的,从而使缓存实现对你来说更容易实现(这里是对用过Picasso框架的伙伴而言的)。缓存的大小取决于设备的磁盘大小。
加载图片的时候,Glide使用了三种资源:内存,磁盘,网络(速度由快变慢)。(tips:也就是三级缓存实现)。当然,你什么都不需要做,Glide会帮你实现,Glide隐藏了这些复杂的具体实现,并且实现了智能缓存图片的大小。下面的博文会详细介绍。

简单的图库图片加载实现:GridView
和ListView的使用方式相同,甚至Adapter也相同,只是将ListView改为GridView

Activity layout

<?xml version="1.0" encoding="utf-8"?>
<GridView
    android:id="@+id/usage_example_gridview"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:numColumns="2"/>

目前为止,我们只展示了item只为一个元素的ListView Adapter的用法,当然这种方式也适用于多个元素的Adapter item。getView()方法略有不同,但Glide加载图片的代码是相同的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值