首先先介绍最简单的列表图片加载(单个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加载图片的代码是相同的。