当我将图片加载到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 />
答案 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);