Glide在第一次加载时缩小图像

时间:2016-07-29 12:25:46

标签: android android-glide

当我将图片加载到ImageView centerCrop()时,会缩小图像。当我旋转或重新打开相同的活动时,它具有正确的大小。我已经尝试possible duplicate了。我已经将修复大小传递给xml中的fitCenter(),我也尝试覆盖大小。 <ImageView android:id="@+id/thumbnail" android:layout_width="@dimen/episode_detail_img_width" android:layout_height="@dimen/episode_detail_img_height" android:layout_marginTop="@dimen/episode_detail_img_margin_top" /> Glide.with(getActivity()) .load(url) .placeholder(R.drawable.thumb_placeholder) .centerCrop() .diskCacheStrategy(DiskCacheStrategy.ALL) .into(thumbnail); 对缩小没有影响。 我也尝试调试图像大小。当它收缩或不收缩时,它会返回相同的宽度和高度。

查看:

immediate="true"

滑翔

<p:commandButton />

4 个答案:

答案 0 :(得分:12)

我很满意你得到了答案。只是为了更好地描述您的问题:

Glide在开始加载图像之前计算了ImageView的高度和宽度,但是当图像加载时,它会替换占位符drawable。因此,如果您的占位符可绘制高度或重量很小,Glide将使用占位符维度呈现下载的位图。

因此,对于不同屏幕尺寸和布局的延迟,我建议在占位符中使用高维可绘制。

还有一个黑客是在占位符中使用颜色,因为颜色没有高度或宽度,所以在视图的整个区域渲染。

答案 1 :(得分:1)

您已经定义了 placeHolder()方法,该方法将在初始时加载,当滑行根据给定的网址加载图像时,然后使用placeHolder图像滑动替换加载的图像。这将出现在imageView中。 这个加载的图像基于这些指定的方法设置到imageView中。

喜欢: cropCenter(),fitCenter()等。

不使用cropCenter()它会从中心裁剪图像并将其放入imageView中,这样图像质量就会消失。

使用fitCenter()方法。

<ImageView
            android:id="@+id/conversation_team_photo"
            android:layout_width="56dp"
            android:layout_height="56dp"
            android:scaleType="fitCenter"
             />

我已经定义了在这里使用滑行的麻烦方式best way to use glide.

答案 2 :(得分:1)

可以通过以下方式解决:

1)添加.dontAnimate()

2)找到与图像比例匹配的占位符

说明: https://github.com/bumptech/glide/issues/1295

  

图像第一次加载默认值.crossFade()踢入和   占位符纵横比与加载的图像不匹配   比。第二次从内存缓存加载图像   在这种情况下会跳过动画,导致只是加载动画   形象正确。您可以通过.dontAnimate()或禁用动画   强制淡入淡出动画.animate(R.anim.fade_in),或找到一个   占位符与图像的比例匹配(即在您的情况下为正方形,   因为512x512)。

答案 3 :(得分:0)

与毕加索相比,Glide在记忆方面更有效率。 Glide会自动将缓存和内存中保存的图像大小限制为ImageView尺寸

清理您的项目并尝试此代码:

Glide
  .with(context)
  .load(url)
  .override(400, 200) // resizes the image to these dimensions (in pixel).does not respect aspect ratio
  .into(thumbnail);