首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StaggeredGridLayout在滚动时搞砸了

StaggeredGridLayout在滚动时搞砸了
EN

Stack Overflow用户
提问于 2015-08-31 12:59:30
回答 2查看 4.4K关注 0票数 6

我为我的RecyclerView做了这个RecyclerView

下面是代码:

代码语言:javascript
复制
 @Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, final int position) {

    Photo photo = mPhotos.get(position);

    TextView titleView = ((CellViewHolder) viewHolder).titleTextView;
        titleView.setText(photo.getTitle());

    TextView subTitleView = ((CellViewHolder) viewHolder).subtitleTextView;
        subTitleView.setText(photo.getName());

    Picasso.with(mContext).load(photo.getPhotoUrl()).into(((CellViewHolder) viewHolder).imageView);

    ImageView userImageOverlay = ((CellViewHolder) viewHolder).userImageOverlay;

    StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) viewHolder.itemView.getLayoutParams();

    if (position == 0 || position % 4 == 0) {
        layoutParams.setFullSpan(true);
        layoutParams.height = Math.round(Utils.convertDpToPixel(202.67f, mContext));
        titleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 21.67f);
        subTitleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12.00f);
        userImageOverlay.setVisibility(View.VISIBLE);
    } else if ((position - 1) % 4 == 0) {
        layoutParams.setFullSpan(false);
        layoutParams.height = Math.round(Utils.convertDpToPixel(360.00f, mContext));
        titleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 15.00f);
        subTitleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 10.00f);
        userImageOverlay.setVisibility(View.GONE);
    } else {
        layoutParams.setFullSpan(false);
        layoutParams.height = Math.round(Utils.convertDpToPixel(180.00f, mContext));
        titleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 15.00f);
        subTitleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 10.00f);
        userImageOverlay.setVisibility(View.GONE);
    }
}

一切都很好,除非我把它卷起来。它按降序按位置绘制单元格,并在网格中留下空空间:

有什么想法吗?如何保持相同的模式,甚至滚动起来?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-21 03:35:13

试试这个:

代码语言:javascript
复制
StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
manager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS);
recyclerView.setLayoutManager(manager);

或:滚动时改变位置

或:github项目Picasso/Glide-RecyclerView-StaggeredGridLayoutManager

票数 3
EN

Stack Overflow用户

发布于 2015-08-31 13:12:48

您需要设置差距战略

代码语言:javascript
复制
mLayoutMang.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS);

当滚动状态更改为空闲时,GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS将更新layous

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32311888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档