提交 7ace7e95 编写于 作者: S Sam Judd

Add from() api to allow builders to be re-used.

上级 b0108222
......@@ -559,7 +559,6 @@ public class GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeT
return this;
}
/**
* Set the target the resource will be loaded into.
*
......
......@@ -474,6 +474,12 @@ public class Glide {
*/
public static <T, Y> ModelLoader<T, Y> buildModelLoader(Class<T> modelClass, Class<Y> resourceClass,
Context context) {
if (modelClass == null) {
if (Log.isLoggable(TAG, Log.DEBUG)) {
Log.d(TAG, "Unable to load null model, setting placeholder only");
}
return null;
}
return Glide.get(context).getLoaderFactory().buildModelLoader(modelClass, resourceClass, context);
}
......@@ -492,13 +498,7 @@ public class Glide {
*/
@SuppressWarnings("unchecked")
public static <T, Y> ModelLoader<T, Y> buildModelLoader(T model, Class<Y> resourceClass, Context context) {
if (model == null) {
if (Log.isLoggable(TAG, Log.DEBUG)) {
Log.d(TAG, "Unable to load null model, setting placeholder only");
}
return null;
}
return buildModelLoader((Class<T>) model.getClass(), resourceClass, context);
return buildModelLoader(model != null ? (Class<T>) model.getClass() : null, resourceClass, context);
}
/**
......
......@@ -37,6 +37,9 @@ public class FlickrPhotoGrid extends Fragment implements PhotoViewer {
private int photoSize;
private GridView grid;
private boolean thumbnail;
private DrawableRequestBuilder<Photo> fullRequest;
private DrawableRequestBuilder<Photo> thumbnailRequest;
private DrawableRequestBuilder<Photo> preloadRequest;
public static FlickrPhotoGrid newInstance(int size, int preloadCount, boolean thumbnail) {
FlickrPhotoGrid photoGrid = new FlickrPhotoGrid();
......@@ -54,6 +57,22 @@ public class FlickrPhotoGrid extends Fragment implements PhotoViewer {
photoSize = args.getInt(IMAGE_SIZE_KEY);
thumbnail = args.getBoolean(THUMBNAIL_KEY);
fullRequest = Glide.with(this)
.from(Photo.class)
.centerCrop()
.crossFade(R.anim.fade_in, 150);
thumbnailRequest = Glide.with(this)
.from(Photo.class)
.priority(Priority.HIGH)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.override(Api.SQUARE_THUMB_SIZE, Api.SQUARE_THUMB_SIZE);
preloadRequest = thumbnail ? thumbnailRequest : Glide.with(this)
.from(Photo.class)
.priority(Priority.HIGH)
.centerCrop();
final View result = inflater.inflate(R.layout.flickr_photo_grid, container, false);
grid = (GridView) result.findViewById(R.id.images);
grid.setColumnWidth(photoSize);
......@@ -109,16 +128,7 @@ public class FlickrPhotoGrid extends Fragment implements PhotoViewer {
@Override
protected GenericRequestBuilder getRequestBuilder(Photo item) {
DrawableRequestBuilder<Photo> request = Glide.with(FlickrPhotoGrid.this)
.load(item)
.priority(Priority.HIGH);
if (thumbnail) {
request.override(Api.SQUARE_THUMB_SIZE, Api.SQUARE_THUMB_SIZE)
.diskCacheStrategy(DiskCacheStrategy.SOURCE);
} else {
request.centerCrop();
}
return request;
return preloadRequest.load(item);
}
}
......@@ -163,20 +173,10 @@ public class FlickrPhotoGrid extends Fragment implements PhotoViewer {
imageView = (ImageView) view;
}
DrawableRequestBuilder<Photo> request = Glide.with(FlickrPhotoGrid.this)
fullRequest
.load(current)
.centerCrop()
.crossFade(R.anim.fade_in, 150);
if (thumbnail) {
request.thumbnail(Glide.with(FlickrPhotoGrid.this)
.load(current)
.override(Api.SQUARE_THUMB_SIZE, Api.SQUARE_THUMB_SIZE)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
);
}
request.into(imageView);
.thumbnail(thumbnail ? thumbnailRequest.load(current) : null)
.into(imageView);
return imageView;
}
......
......@@ -12,9 +12,11 @@ import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.bumptech.glide.DrawableRequestBuilder;
import com.bumptech.glide.GenericRequestBuilder;
import com.bumptech.glide.Glide;
import com.bumptech.glide.ListPreloader;
import com.bumptech.glide.Priority;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.samples.flickr.api.Api;
import com.bumptech.glide.samples.flickr.api.Photo;
......@@ -32,6 +34,9 @@ public class FlickrPhotoList extends Fragment implements PhotoViewer {
private List<Photo> currentPhotos;
private FlickrListPreloader preloader;
private ListView list;
private DrawableRequestBuilder<Photo> fullRequest;
private DrawableRequestBuilder<Photo> thumbRequest;
private DrawableRequestBuilder<Photo> preloadRequest;
public static FlickrPhotoList newInstance() {
return new FlickrPhotoList();
......@@ -57,6 +62,23 @@ public class FlickrPhotoList extends Fragment implements PhotoViewer {
adapter.setPhotos(currentPhotos);
}
fullRequest = Glide.with(FlickrPhotoList.this)
.from(Photo.class)
.placeholder(new ColorDrawable(Color.GRAY))
.centerCrop();
preloadRequest = Glide.with(FlickrPhotoList.this)
.from(Photo.class)
.placeholder(new ColorDrawable(Color.GRAY))
.centerCrop()
.priority(Priority.HIGH);
thumbRequest = Glide.with(FlickrPhotoList.this)
.from(Photo.class)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.override(Api.SQUARE_THUMB_SIZE, Api.SQUARE_THUMB_SIZE);
if (savedInstanceState != null) {
int index = savedInstanceState.getInt(STATE_POSITION_INDEX);
int offset = savedInstanceState.getInt(STATE_POSITION_OFFSET);
......@@ -117,14 +139,9 @@ public class FlickrPhotoList extends Fragment implements PhotoViewer {
@Override
protected GenericRequestBuilder getRequestBuilder(Photo item) {
return Glide.with(FlickrPhotoList.this)
.load(item)
.centerCrop()
.thumbnail(Glide.with(FlickrPhotoList.this)
.load(item)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.override(Api.SQUARE_THUMB_SIZE, Api.SQUARE_THUMB_SIZE)
);
return preloadRequest
.thumbnail(thumbRequest.load(item))
.load(item);
}
}
......@@ -178,15 +195,9 @@ public class FlickrPhotoList extends Fragment implements PhotoViewer {
viewHolder = (ViewHolder) view.getTag();
}
Glide.with(FlickrPhotoList.this)
fullRequest
.thumbnail(thumbRequest.load(current))
.load(current)
.placeholder(new ColorDrawable(Color.GRAY))
.centerCrop()
.crossFade(R.anim.fade_in, 150)
.thumbnail(Glide.with(FlickrPhotoList.this)
.load(current)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.override(Api.SQUARE_THUMB_SIZE, Api.SQUARE_THUMB_SIZE))
.into(viewHolder.imageView);
viewHolder.titleText.setText(current.getTitle());
......
......@@ -8,9 +8,11 @@ import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import com.bumptech.glide.DrawableRequestBuilder;
import com.bumptech.glide.GenericRequestBuilder;
import com.bumptech.glide.Glide;
import com.bumptech.glide.ListPreloader;
import com.bumptech.glide.Priority;
import java.io.InputStream;
import java.util.ArrayList;
......@@ -23,6 +25,7 @@ public class MainActivity extends Activity implements Api.Monitor {
private static final String TAG = "GiphyActivity";
private GifAdapter adapter;
private DrawableRequestBuilder<Api.GifResult> preloadRequest;
@Override
protected void onCreate(Bundle savedInstanceState) {
......@@ -41,7 +44,16 @@ public class MainActivity extends Activity implements Api.Monitor {
ListView gifList = (ListView) findViewById(R.id.gif_list);
GiphyPreloader preloader = new GiphyPreloader(2);
adapter = new GifAdapter(this, preloader);
DrawableRequestBuilder<Api.GifResult> fullRequest = Glide.with(this)
.from(Api.GifResult.class)
.fitCenter();
preloadRequest = Glide.with(this)
.from(Api.GifResult.class)
.fitCenter()
.priority(Priority.HIGH);
adapter = new GifAdapter(this, preloader, fullRequest);
gifList.setAdapter(adapter);
gifList.setOnScrollListener(preloader);
}
......@@ -87,9 +99,7 @@ public class MainActivity extends Activity implements Api.Monitor {
@Override
protected GenericRequestBuilder getRequestBuilder(Api.GifResult item) {
return Glide.with(MainActivity.this)
.load(item)
.fitCenter();
return preloadRequest.load(item);
}
}
......@@ -98,12 +108,15 @@ public class MainActivity extends Activity implements Api.Monitor {
private final Activity activity;
private final GiphyPreloader preloader;
private DrawableRequestBuilder<Api.GifResult> requestBuilder;
private Api.GifResult[] results = EMPTY_RESULTS;
public GifAdapter(Activity activity, GiphyPreloader preloader) {
public GifAdapter(Activity activity, GiphyPreloader preloader,
DrawableRequestBuilder<Api.GifResult> requestBuilder) {
this.activity = activity;
this.preloader = preloader;
this.requestBuilder = requestBuilder;
}
public void setResults(Api.GifResult[] results) {
......@@ -142,9 +155,8 @@ public class MainActivity extends Activity implements Api.Monitor {
}
final ImageView gifView = (ImageView) convertView.findViewById(R.id.gif_view);
Glide.with(activity)
requestBuilder
.load(result)
.fitCenter()
.into(gifView);
if (preloader.dimensions == null) {
......
package com.bumptech.svgsample.app;
import android.app.Activity;
import android.content.ContentResolver;
import android.graphics.drawable.PictureDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.GenericRequestBuilder;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.model.StreamEncoder;
......@@ -23,8 +25,9 @@ import java.io.InputStream;
public class MainActivity extends Activity {
private static final String TAG = "SVGActivity";
ImageView imageViewRes;
ImageView imageViewNet;
private ImageView imageViewRes;
private ImageView imageViewNet;
private GenericRequestBuilder<Uri, InputStream, SVG, PictureDrawable> requestBuilder;
@Override
protected void onCreate(Bundle savedInstanceState) {
......@@ -33,6 +36,19 @@ public class MainActivity extends Activity {
imageViewRes = (ImageView) findViewById(R.id.svg_image_view1);
imageViewNet = (ImageView) findViewById(R.id.svg_image_view2);
requestBuilder = Glide.with(this)
.using(Glide.buildStreamModelLoader(Uri.class, this), InputStream.class)
.from(Uri.class)
.as(SVG.class)
.transcode(new SvgDrawableTranscoder(), PictureDrawable.class)
.sourceEncoder(new StreamEncoder())
.cacheDecoder(new FileToStreamDecoder<SVG>(new SvgDecoder()))
.decoder(new SvgDecoder())
.placeholder(R.drawable.image_loading)
.error(R.drawable.image_error)
.animate(android.R.anim.fade_in)
.listener(new SvgSoftwareLayerSetter<Uri>());
}
@Override
......@@ -77,38 +93,22 @@ public class MainActivity extends Activity {
}
private void loadRes() {
Glide.with(this)
.using(Glide.buildStreamModelLoader(Integer.class, this), InputStream.class)
.load(R.raw.android_toy_h)
.as(SVG.class)
.transcode(new SvgDrawableTranscoder(), PictureDrawable.class)
Uri uri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + getPackageName() + "/"
+ R.raw.android_toy_h);
requestBuilder
.diskCacheStrategy(DiskCacheStrategy.NONE)
// SVG cannot be serialized so it's not worth to cache it
// and the getResources() should be fast enough when acquiring the InputStream
.decoder(new SvgDecoder())
.placeholder(R.drawable.image_loading)
.error(R.drawable.image_error)
.animate(android.R.anim.fade_in)
.listener(new SvgSoftwareLayerSetter<Integer>())
.load(uri)
.into(imageViewRes);
}
private void loadNet() {
Glide.with(this)
.using(Glide.buildStreamModelLoader(String.class, this), InputStream.class)
.load("http://www.clker.com/cliparts/u/Z/2/b/a/6/android-toy-h.svg")
.as(SVG.class)
.transcode(new SvgDrawableTranscoder(), PictureDrawable.class)
Uri uri = Uri.parse("http://www.clker.com/cliparts/u/Z/2/b/a/6/android-toy-h.svg");
requestBuilder
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
// SVG cannot be serialized so it's not worth to cache it
.sourceEncoder(new StreamEncoder())
// however loading from the network can be cached via StreamEncoder
.cacheDecoder(new FileToStreamDecoder<SVG>(new SvgDecoder()))
.decoder(new SvgDecoder())
.placeholder(R.drawable.image_loading)
.error(R.drawable.image_error)
.animate(android.R.anim.fade_in)
.listener(new SvgSoftwareLayerSetter<String>())
.load(uri)
.into(imageViewNet);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册