背景:
近期在公司开发中,项目开发中,出现了,在viewpager 中嵌套fragment中,glide加图片出现第一次加载的时候出现模糊的想象。
修改前:
展示代码:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView = new ImageView(mContext);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
ImageLoaderHelper.getInstance().displayChatGroupImage(mContext, imageView, data.get(position), R.drawable.bg_chat_group_default, 5);
return imageView;
}
@Override
public void displayChatGroupImage(Context context, ImageView imageView, String url, int defaultImageResId, int radius) {
Glide.with(context)
.load(getChatGroupGlideUrl(url))
.transform(new CenterCrop(context), new RoundTransform(context, radius))
.diskCacheStrategy(DiskCacheStrategy.ALL)
.placeholder(defaultImageResId)
.into(imageView);
}
为了达到居中并截取显示,默认Imageview显示都是正常,但是却是在第一次加载的时候出现了模糊,一直以为是缓存策略的问题,但是防线加了diskCacheStrategy(DiskCacheStrategy.ALL)也是没有效果的,后面才发现,缓存策略使用的是缓存所有,但是默认第一次显示是加载的是原图没有错,但是因为没有设置图片控件的具体宽度和高度,导致了第一次加载显示的是图片左上角的大图,
修正后:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView = new ImageView(mContext);
ViewGroup.LayoutParams params = null;
if (isNormalSize) {
params = new ViewGroup.LayoutParams(normalSize, normalSize);
} else {
params = new ViewGroup.LayoutParams(bigSize, normalSize);
}
imageView.setLayoutParams(params);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
ImageLoaderHelper.getInstance().displayChatGroupImage(mContext, imageView, data.get(position), R.drawable.bg_chat_group_default, 5);
return imageView;
}
这样在第一次加载的时候就可以正常的展示出要的效果
网友评论