[英]How to set images with different sizes in using grid layout manager to recyclerview?
You can use a StaggeredGridLayout as below. 您可以如下使用StaggeredGridLayout。
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(3, LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(staggeredGridLayoutManager);
CustomAdapter customAdapter = new CustomAdapter(MainActivity.this,images);
recyclerView.setAdapter(customAdapter);
I have managed span of images in adapter class like below.
private static final int TYPE_SMALL_SQUARE = 0;
private static final int TYPE_LARGE_SQUARE = 1;
private static final int TYPE_LREACT = 2;
private static final int TYPE_HREACT = 3;
@Override
public int getItemViewType(int position) {
switch (position) {
case 0:
return TYPE_LARGE_SQUARE;
case 1:
return TYPE_HREACT;
case 2:
return TYPE_LREACT;
case 3:
return TYPE_LREACT;
case 4:
return TYPE_SMALL_SQUARE;
}
return super.getItemViewType(position);
}
Then implement onPreDraw method in on create view.
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.category_adapter, parent, false);
ButterKnife.bind(this, view);
view.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
final int type = viewType;
final ViewGroup.LayoutParams lp = view.getLayoutParams();
final StaggeredGridLayoutManager lm =
(StaggeredGridLayoutManager) ((RecyclerView) parent).getLayoutManager();
if (lp instanceof StaggeredGridLayoutManager.LayoutParams) {
StaggeredGridLayoutManager.LayoutParams sglp =
(StaggeredGridLayoutManager.LayoutParams) lp;
switch (type) {
case TYPE_LARGE_SQUARE:
sglp.width = view.getWidth() ;
sglp.height = view.getHeight()/2;
break;
case TYPE_HREACT:
sglp.width = view.getWidth() ;
sglp.height = view.getHeight() ;
break;
case TYPE_LREACT:
sglp.width = view.getWidth() ;
sglp.height = view.getHeight() / 2;
break;
case TYPE_SMALL_SQUARE:
sglp.width = view.getWidth();
sglp.height = view.getHeight()/2;
break;
}
view.setLayoutParams(sglp);
lm.invalidateSpanAssignments();
}
view.getViewTreeObserver().removeOnPreDrawListener(this);
return true;
}
});
return new ViewHolder(view);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.