提交 cd7216d8 编写于 作者: S Sam Judd 提交者: Sam Judd

add preloading to photo list

上级 78ca8506
......@@ -90,8 +90,10 @@ public abstract class ListPreloader<T> implements AbsListView.OnScrollListener {
private void preload(List<T> items, int position) {
final T item = items.get(position);
int[] dimens = getDimens(item);
getRequest(item).into(preloadTargetQueue.next(dimens[0], dimens[1])).with(context);
final int[] dimens = getDimens(item);
if (dimens != null) {
getRequest(item).into(preloadTargetQueue.next(dimens[0], dimens[1])).with(context);
}
}
private void cancelAll() {
......
package com.bumptech.glide.samples.flickr;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
......@@ -10,6 +11,7 @@ import android.widget.ListView;
import android.widget.TextView;
import com.actionbarsherlock.app.SherlockFragment;
import com.bumptech.glide.Glide;
import com.bumptech.glide.ListPreloader;
import com.bumptech.glide.loader.model.Cache;
import com.bumptech.glide.samples.flickr.api.Photo;
......@@ -28,6 +30,7 @@ public class FlickrPhotoList extends SherlockFragment implements PhotoViewer {
private FlickrPhotoListAdapter adapter;
private List<Photo> currentPhotos;
private Cache<URL> urlCache = new Cache<URL>();
private FlickrListPreloader preloader;
public static FlickrPhotoList newInstance() {
return new FlickrPhotoList();
......@@ -46,6 +49,8 @@ public class FlickrPhotoList extends SherlockFragment implements PhotoViewer {
ListView list = (ListView) result.findViewById(R.id.flickr_photo_list);
adapter = new FlickrPhotoListAdapter();
list.setAdapter(adapter);
preloader = new FlickrListPreloader(getActivity(), 5);
list.setOnScrollListener(preloader);
if (currentPhotos != null)
adapter.setPhotos(currentPhotos);
return result;
......@@ -61,6 +66,41 @@ public class FlickrPhotoList extends SherlockFragment implements PhotoViewer {
}
}
private class FlickrListPreloader extends ListPreloader<Photo> {
private int[] photoDimens = null;
public FlickrListPreloader(Context context, int maxPreload) {
super(context, maxPreload);
}
public boolean isDimensSet() {
return photoDimens != null;
}
public void setDimens(int width, int height) {
if (photoDimens == null) {
photoDimens = new int[] { width, height };
}
}
@Override
protected int[] getDimens(Photo item) {
return photoDimens;
}
@Override
protected List<Photo> getItems(int start, int end) {
return currentPhotos.subList(start, end);
}
@Override
protected Glide.Request<Photo> getRequest(Photo item) {
return Glide.using(new FlickrModelLoader(getActivity(), urlCache))
.load(item)
.centerCrop();
}
}
private class FlickrPhotoListAdapter extends BaseAdapter {
private final LayoutInflater inflater;
private List<Photo> photos = new ArrayList<Photo>(0);
......@@ -95,14 +135,23 @@ public class FlickrPhotoList extends SherlockFragment implements PhotoViewer {
final ViewHolder viewHolder;
if (view == null) {
view = inflater.inflate(R.layout.flickr_photo_list_item, container, false);
ImageView imageView = (ImageView) view.findViewById(R.id.photo_view);
final ImageView imageView = (ImageView) view.findViewById(R.id.photo_view);
TextView titleView = (TextView) view.findViewById(R.id.title_view);
viewHolder = new ViewHolder(imageView, titleView);
view.setTag(viewHolder);
if (!preloader.isDimensSet()) {
imageView.post(new Runnable() {
@Override
public void run() {
preloader.setDimens(imageView.getWidth(), imageView.getHeight());
}
});
}
} else {
viewHolder = (ViewHolder) view.getTag();
}
Glide.using(new FlickrModelLoader(getActivity(), urlCache))
.load(current)
.centerCrop()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册