Android将图像高效加载到imageview中

时间:2015-06-13 20:40:23

标签: android bitmap imageview out-of-memory

我有下一个问题: 为了避免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);

但是,我有两个问题:

  1. 图像加载有一些延迟(但我需要加载它)
  2. 在某些情况下,centerCrop()不是我需要的。

    我如何实现topCrop()或bottomCrop()之类的东西?我试过https://github.com/cesards/CropImageView库, 但我在setFrame()方法中得到NullPointerException(getDrawable()返回null),因为图像尚未加载。 提前致谢!

1 个答案:

答案 0 :(得分:1)

  

图像加载有一些延迟(但我需要加载它)

你必须选择:(a)内存有效延迟或(b)即时但可能的OOM。我说根据经验,我在Play商店的应用程序有一点延迟,而毕加索正在处理它。这就是它的工作原理。

  在某些情况下,

centerCrop()不是我需要的。

然后你应该加载图片into()一个Target。目标将在UI线程中接收Drawable,您可以在那里将其设置在ImageView内(使用setScaleType)或作为背景,无论如何。甚至可能使用InsetDrawable来调整位置。