3

我一直在使用 Picasso 的库将图像加载到我的应用程序中的 gridview 中,它的工作原理和外观完全符合我的要求。但是用户告诉我图像加载非常缓慢。我知道这是因为网络速度不佳,毕加索正在加载我的完整图像,这些图像非常大,然后调整它们的大小以适合我的图像视图。所以我尝试使用 glide 以几乎两倍的速度加载图像,但在某些图像上它并没有像 Picasso 那样保持结构。例如,毕加索加载图像看起来像

这个

虽然滑动加载它们有不同的状态,但这是它最初加载的状态

第一状态

然后滚动后看起来像

这个

然后最终经过大量滚动后看起来像

这个

我非常有信心这是因为我的图像尺寸都不同,而且似乎使占位符图像的尺寸不同会产生影响,但我想知道的是如何让滑行保持其初始状态,或者如何让毕加索加载更快?我听说将颜色格式从 888 降低到 565 会产生戏剧性的效果,有人可以借我两美分吗?感谢您的任何建议

编辑

这是我的图像视图

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

我就是这样称呼毕加索的

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

        return imageView;

这就是我现在所说的滑翔

                 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"
    >
4

1 回答 1

5

默认情况下,Glide 会尝试保持图像的纵横比。当您使用 时fitCenter(),这意味着您希望整个图像可见并在可用区域内居中。切换到centerCrop()将是确保图像填充可用的高度和宽度的第一步。

但是,您也遇到了一个长期存在的问题GridView:它假定所有列的高度相同。然而,你使用wrap_contentImageView的高度,导致每个元素根据传入的高度调整不同的大小(请记住,在 Glide 的角度来看,你说你ImageView可以尽可能高!)。

如果你有一个主要的纵横比(比如 16:9),你可以使用一个固定的纵横比视图,比如这个 AspectRatioImageView,它总是使用基于列宽度的相同高度(由你的 设置GridView)。另一个更复杂的选项是切换到RecyclerView并使用StaggeredGridLayoutManager,这将允许您保持每个图像的纵横比并交错行,确保每个图像填充空间并保持其纵横比。

于 2015-08-16T21:33:22.203 回答