我有下一个问题: 为了避免OutOfMemoryError我正在以这种方式使用Picasso将我的大图像加载到ImageViews中:
public static RequestCreator picasso(final Context context, final int resourceId) {
return Picasso.with(context)
.load(resourceId)
.fit()
.centerCrop()
.noFade();
}
在活动或片段中,我将图像加载到ImageView
final ImageView backgroundImage = (ImageView) root.findViewById(R.id.background_image);
Util.picasso(getActivity(),R.drawable.background_soulmap)
.into(backgroundImage);
但是,我有两个问题:
在某些情况下,centerCrop()不是我需要的。
我如何实现topCrop()或bottomCrop()之类的东西?我试过https://github.com/cesards/CropImageView库, 但我在setFrame()方法中得到NullPointerException(getDrawable()返回null),因为图像尚未加载。 提前致谢!
答案 0 :(得分:1)
图像加载有一些延迟(但我需要加载它)
你必须选择:(a)内存有效延迟或(b)即时但可能的OOM。我说根据经验,我在Play商店的应用程序有一点延迟,而毕加索正在处理它。这就是它的工作原理。
在某些情况下,centerCrop()不是我需要的。
然后你应该加载图片into()
一个Target
。目标将在UI线程中接收Drawable
,您可以在那里将其设置在ImageView内(使用setScaleType
)或作为背景,无论如何。甚至可能使用InsetDrawable
来调整位置。