【问题标题】:Making grid filled with Glide more structured让 Glide 填充的网格更有条理
【发布时间】:2015-08-19 22:48:44
【问题描述】:

我在here 上提出了这个问题.我得到的答案是 GridViews 的一个长期存在的问题,并尝试了 Jake Wharton 的纵横比图像视图,我尝试过但没有成功。另一个建议是交错的RecyclerView,很好的答案,但有很多变化

所有这些的原因是我的图像太大,毕加索无法快速加载,用户抱怨它真的很慢,但是 Glide(看起来更快)将图像加载到那里的纵横比并弄乱了均匀性在我的网格中,您可以在链接中看到:长图像占用与 2 个宽图像相同的空间。无论如何,经过大量的试验和错误,我现在使用 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 的调整大小调用)?我认为它必须等待测量视图,但它仍然比毕加索更快。谁能提供更好的?

【问题讨论】:

  • Glide 在这种情况下不会等待布局,因为您使用 .override() 这将是生成的位图的大小。
  • 我认为你应该接受这些建议,交错的RecyclerViewAspectImageView(或更通用的布局,如this)从长远来看会有所帮助。查询显示尺寸极易出错(不考虑边距、内边距、间距等);让 Android 布局系统完成它的工作;)
  • 你需要使用display.getSize(size);

标签: android android-windowmanager android-glide


【解决方案1】:

对于小于蜂窝的 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();
    }

【讨论】:

    【解决方案2】:

    您可以使用getDisplayMetrics()

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

    【讨论】:

      猜你喜欢
      • 2022-01-10
      • 2017-09-22
      • 1970-01-01
      • 2011-09-26
      • 2020-12-09
      • 2023-01-07
      • 2019-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多