如何在Gridlayout中使第一张图像更大?

时间:2015-07-26 06:39:47

标签: android android-recyclerview gridlayoutmanager

准确地说,我希望实现这一目标。 enter image description here

我正在使用recyclerview和GridLayoutManager。我还使用以下代码将第一项设置为大

        lLayout.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int i) {
            if (i==0) return 2;
            else return 1;
        }
    });

一切正常,除了一个:位置1的项目(即大图像中的下一个项目)垂直拉长以匹配大项目的高度。从第3行开始,所有图像都如图所示。

我怎样摆脱这个?

编辑:经过一些分析后

所以问题似乎是大图像水平地采用两个跨度但垂直单跨,因为我强制我的ImageView是方形的,看起来它也采取了两行,其实它是一个单一的行。由于这个原因,第二张图像看起来很长。

所以现在我的问题是,如何使网格项垂直两个跨度,两个水平跨度?

2 个答案:

答案 0 :(得分:3)

尝试使用 StaggeredGridLayoutManager 而不是 GridLayoutManager StaggeredGridLayoutManager支持横向和&垂直布局以及反向布局儿童的能力。 适配器的 onBindViewHolder 方法,您可以使用此代码根据项目的位置设置范围

final ViewGroup.LayoutParams lp = holder.itemView.getLayoutParams();    
if (position == 0) {
                StaggeredGridLayoutManager.LayoutParams sglp = (StaggeredGridLayoutManager.LayoutParams) lp;
                sglp.setFullSpan(true);
                holder.itemView.setLayoutParams(sglp);
            }

找到示例http://enoent.fr/blog/2015/01/18/recyclerview-basics/ ...希望它能帮到你

答案 1 :(得分:0)

在GridViewAdapter类中尝试以下代码

public class GridViewAdapter extends BaseAdapter {
private Context context;
private ArrayList<Integer> imageArrayList = new ArrayList<>();
private int type;

public GridViewAdapter(Context context, ArrayList<Integer> imageArrayList) {
    this.context = context;
    this.imageArrayList = imageArrayList;
}

@Override
public int getCount() {
    return imageArrayList.size();
}

@Override
public Object getItem(int position) {
    return imageArrayList.get(position);
}

@Override
public long getItemId(int position) {
    return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder viewHolder = new ViewHolder();
    if(convertView==null){
        LayoutInflater inflater = LayoutInflater.from(context);
        type = getItemViewType(position);
        if(type==0) {
            convertView = inflater.inflate(R.layout.big_layout,parent,false);
        }else {
            convertView = inflater.inflate(R.layout.small_layout, parent, false);
        }
        viewHolder.imageView = convertView.findViewById(R.id.imageView);
        convertView.setTag(viewHolder);
    }else{
        viewHolder = (ViewHolder) convertView.getTag();
    }
        viewHolder.imageView.setImageDrawable(context.getResources().getDrawable(imageArrayList.get(position)));
    return convertView;
}

@Override
public int getViewTypeCount() {
    return super.getViewTypeCount();
}

@Override
public int getItemViewType(int position) {
    if(position==0) {
        return 0;
    }else{
        return 1;
    }
}

    private class ViewHolder{
        ImageView imageView;
    }
}