如何使Glide显示像Picasso一样?

3
我一直在使用Picasso库将图片加载到我的应用程序中的GridView中,它的工作效果完美。但是用户告诉我,图片加载非常缓慢,这是因为网络速度较慢,而Picasso会加载完整的大图像,然后将其调整大小以适应我的ImageView。因此,我尝试使用Glide,它的加载速度几乎比Picasso快两倍,但对于某些图片,它并没有像Picasso那样保持结构。例如,Picasso加载的图像看起来像这样:

this

而Glide加载它们有不同的状态,这是它最初加载的样子:

first state

然后滚动后它看起来像:

this

最终在大量滚动之后它看起来像:

this

我非常有信心认为这是因为我的图片大小都不同,而且似乎让我的占位符图像的大小不同会产生影响,但我想知道如何让Glide保持它的初始状态,或者如何让Picasso更快地加载?我听说将色彩格式从888降低到565会产生显著影响,能否有人给我建议?感谢所有建议。

编辑:

这是我的ImageView

<ImageView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:scaleType="fitXY"
    android:id="@+id/imageView"/>

这是我调用 Picasso 的方式:

                 Picasso.with(getActivity())
                .load(mThumbIds[position])
                .placeholder(R.drawable.placeholder)
                .fit()
                .into(imageView);

        return imageView;

现在我是这样调用Glide的

                 Glide.with(getActivity())
                .load(mThumbIds[position])
                .asBitmap()
                .placeholder(R.drawable.placeholder)
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .fitCenter()
                .error(R.drawable.ic_photos)
                .into(imageView);

         return imageView;

如果有必要,这是我的GridView:

    <GridView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_margin="5dp"
    android:id="@+id/gridview"
    android:numColumns="2"
    android:gravity="center"
    android:drawSelectorOnTop="true"
    android:listSelector="@drawable/ripple"
    android:stretchMode="columnWidth"
    >

那么 Glide 保留了图像的纵横比,这不是你想要的吗?你能否包含你之前使用的 Picasso 代码和现在使用的 Glide 代码以及每个项目所使用的 XML(特别是 ImageView 部分)? - ianhanniballake
@ianhanniballake,你的描述比我给出的好多了。Glide保持了宽高比,我已经添加了相关的代码片段,可能会改变问题的标题。我尝试过在ImageView上玩弄ScaleTypes和Glide的CenterCrop方法,但都没有成功。 - Martin Seal
1个回答

5
默认情况下,Glide会尝试保持图像的纵横比。当您使用fitCenter()时,这意味着您希望整个图像可见且在可用区域内居中。转换为centerCrop()将是确保图像填充其可用高度和宽度的第一步。
然而,您还遇到了一个长期存在的GridView问题:它假定所有列具有相同的高度。但是,您将ImageView的高度设置为wrap_content,导致每个元素根据所接收的高度进行不同的调整(请记住,从Glide的角度来看,您说ImageView可以尽可能高!)。
如果您有主导纵横比(例如16:9),则可以使用固定纵横比视图,例如此AspectRatioImageView,该视图始终基于列的宽度(由您的GridView设置)使用相同的高度。另一个更复杂的选项是切换到RecyclerView并使用StaggeredGridLayoutManager,这将允许您保持每个图像的纵横比并交错行,确保每个图像填充空间并保持其纵横比。

好的,那很有道理,所以猜测由于Jake Wharton参与了Picasso的开发,这个功能可能已经集成到其中了?所以我最好尝试让Picasso运行更轻便一些。 - Martin Seal
如果你还没有在谷歌搜索中看到过这篇关于Glide和Picasso的比较博客文章,那么它非常出色。 - ianhanniballake
看起来 Picasso 没有 setdecodeformat 的等效方法。 - Martin Seal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接