Android - StaggeredGrid 错误的项目配置

Android - StaggeredGrid wrong items disposition

我的 Recycler 视图和 StaggeredGrid 有问题,它们将宽度减少了 2。 我使用 Picasso 将图像加载到项目中,当我第一次加载图像时,它们在回收站视图中的处理方式很奇怪。 重新加载后,一切似乎都很好。

我认为问题出在图像加载上:StaggeredGrid 第一次不知道图像高度,但由于缓存重新加载后知道。

我该如何解决这个问题?

我想你已经回答了你自己的问题。在将数据添加到回收器之前,您需要加载 images/determine 它们的尺寸。

通过将差距策略更改为解决:

StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
    manager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS);
    recyclerView.setLayoutManager(manager);

自动更改项目的位置

发生这种情况是因为当您上下滚动时,holder 无法识别图像视图的宽度和高度。当您向下滚动时,它会清除上面的视图,反之亦然。

这样使用:

@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {

MyViewHolder vh = (MyViewHolder) viewHolder;
ImageModel item = imageModels.get(position);
RelativeLayout.LayoutParams rlp = (RelativeLayout.LayoutParams)vh.imageView.getLayoutParams();
float ratio = item.getHeight() / item.getWidth();
rlp.height = (int) (rlp.width * ratio);
vh.imageView.setLayoutParams(rlp);
vh.positionTextView.setText("pos: " + position);
vh.imageView.setRatio(item.getRatio());
Picasso.with(mContext).load(item.getUrl()).placeholder(PlaceHolderDrawableHelper.getBackgroundDrawable(position)).into(vh.imageView);
}

要清楚请看这个link:Picasso/Glide-RecyclerView-StaggeredGridLayoutManager