使填充 Glide 的网格更加结构化

Making grid filled with Glide more structured

我在 上问过这个问题 我正在尝试使用 Glide 将宽和长图像加载到 GridView 中,并希望像 Picasso 那样更均匀地加载这些不同大小的图像,同时保持纵横比尽可能大。我得到的答案是 GridViews 的一个长期存在的问题,并尝试 Jake Wharton 的宽高比图像视图,我尝试过但没有成功。另一个建议是交错 RecyclerView,很好的答案,但有很多变化

所有这一切的原因是我的图片太大以至于 Picasso 无法快速加载并且用户抱怨它真的很慢,但是 Glide(看起来更快)加载图片到那里的宽高比并且搞砸了我的网格的均匀性,您可以在 link 中看到:长图像采用与 2 个宽图像相同的 space。不管怎样,经过大量的试验和错误,我现在像这样使用 Glide:

int width = getActivity().getWindowManager().getDefaultDisplay().getWidth();
int myWidth = width / 2;

Glide.with(getActivity())
     .load(mThumbIds[position])
     .placeholder(R.drawable.placeholder)
     .override(myWidth, myWidth)
     .centerCrop()
     .into(imageView)
;

我是 Android 的新手,但这似乎工作得很好。我现在的问题是 getWidth 被弃用,(该应用程序适用于 API 16+)这有什么问题吗(将屏幕宽度除以它并将其传递给 Glide 的调整大小调用)?我认为它必须等待测量视图,但它仍然比 Picasso 快。谁能提供更好的东西?

对于 api 低于蜂窝的情况,您可以使用您的方法,但对于 api 更高的情况,您需要使用 getSize() 方法。我为此使用以下代码

    if (android.os.Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB_MR2) {
         Display display = getWindowManager().getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);
        int width = size.x;
        int height = size.y;
    } else {
        Display display = getWindowManager().getDefaultDisplay();
        int width = display.getWidth();
        int height = display.getHeight();
    }

您可以使用getDisplayMetrics()

getActivity().getResources().getDisplayMetrics().widthPixels;