如何在 Recycler View 中使用 Fresco 预缓存 2-3 个图像
How to Precache 2-3 Images using Fresco in Recycler View
我正在使用 Fresco 使用以下代码在 Recycler View 中加载图像。
目前,一旦用户滚动到任何项目,图像加载就会开始,Fresco 加载图像并缓存它以备后用,下次从缓存中加载图像。有什么方法可以预缓存图像,以便即使是第一次也可以快速加载图像。
public class ProductFeedsRecyclerAdapterV2 extends RecyclerView.Adapter<ProductFeedsRecyclerAdapterV2.ViewHolder> {
private static final String TAG = ProductFeedsRecyclerAdapterV2.class.getSimpleName();
private List<ProductFeed> mItems;
private float ratio;
Context context;
String user_id;
public ProductFeedsRecyclerAdapterV2(Context context, List<ProductFeed> items) {
mItems = items;
this.context = context;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_item_brand_feed, viewGroup, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(final ViewHolder viewHolder, final int i) {
final ProductFeed feed = mItems.get(i);
CircleProgressBarDrawable drawable = new CircleProgressBarDrawable();
drawable.setBackgroundColor(context.getResources().getColor(R.color.gray));
drawable.setColor(context.getResources().getColor(R.color.colorAccent));
GenericDraweeHierarchyBuilder builder =
new GenericDraweeHierarchyBuilder(context.getResources());
GenericDraweeHierarchy hierarchy = builder
.setFadeDuration(100)
.setProgressBarImage(drawable)
.build();
hierarchy.setActualImageScaleType(ScalingUtils.ScaleType.FOCUS_CROP);
hierarchy.setActualImageFocusPoint(new PointF(0.5f,0f));
Uri uri = Uri.parse(feed.image);
viewHolder.ivBrandImage.setImageURI(uri);
viewHolder.ivBrandImage.setHierarchy(hierarchy);
viewHolder.ivBrandImage.setAspectRatio(1.15f);
}
@Override
public int getItemCount() {
return mItems.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.ivBrandImage) SimpleDraweeView ivBrandImage;
ViewHolder(View v) {
super(v);
ButterKnife.bind(this, v);
}
}
}
Fresco 支持预取,参见http://frescolib.org/docs/using-image-pipeline.html
您可以直接调用
imagePipeline.prefetchToDiskCache(imageRequest, callerContext);
或
imagePipeline.prefetchToBitmapCache(imageRequest, callerContext);
预取到磁盘或位图缓存。
我正在使用 Fresco 使用以下代码在 Recycler View 中加载图像。 目前,一旦用户滚动到任何项目,图像加载就会开始,Fresco 加载图像并缓存它以备后用,下次从缓存中加载图像。有什么方法可以预缓存图像,以便即使是第一次也可以快速加载图像。
public class ProductFeedsRecyclerAdapterV2 extends RecyclerView.Adapter<ProductFeedsRecyclerAdapterV2.ViewHolder> {
private static final String TAG = ProductFeedsRecyclerAdapterV2.class.getSimpleName();
private List<ProductFeed> mItems;
private float ratio;
Context context;
String user_id;
public ProductFeedsRecyclerAdapterV2(Context context, List<ProductFeed> items) {
mItems = items;
this.context = context;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_item_brand_feed, viewGroup, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(final ViewHolder viewHolder, final int i) {
final ProductFeed feed = mItems.get(i);
CircleProgressBarDrawable drawable = new CircleProgressBarDrawable();
drawable.setBackgroundColor(context.getResources().getColor(R.color.gray));
drawable.setColor(context.getResources().getColor(R.color.colorAccent));
GenericDraweeHierarchyBuilder builder =
new GenericDraweeHierarchyBuilder(context.getResources());
GenericDraweeHierarchy hierarchy = builder
.setFadeDuration(100)
.setProgressBarImage(drawable)
.build();
hierarchy.setActualImageScaleType(ScalingUtils.ScaleType.FOCUS_CROP);
hierarchy.setActualImageFocusPoint(new PointF(0.5f,0f));
Uri uri = Uri.parse(feed.image);
viewHolder.ivBrandImage.setImageURI(uri);
viewHolder.ivBrandImage.setHierarchy(hierarchy);
viewHolder.ivBrandImage.setAspectRatio(1.15f);
}
@Override
public int getItemCount() {
return mItems.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.ivBrandImage) SimpleDraweeView ivBrandImage;
ViewHolder(View v) {
super(v);
ButterKnife.bind(this, v);
}
}
}
Fresco 支持预取,参见http://frescolib.org/docs/using-image-pipeline.html
您可以直接调用
imagePipeline.prefetchToDiskCache(imageRequest, callerContext);
或
imagePipeline.prefetchToBitmapCache(imageRequest, callerContext);
预取到磁盘或位图缓存。