public class GalleryAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private final List<String> mList;
private final Context mContext;
private final OnGalleryItemClickListener mOnGalleryItemClickListener;
int [] heaightSize = new int[]{1390,1390,1200,1390,1456,1456,1390,1390,1377,1390};
public GalleryAdapter(List<String> verticalList, Context context, OnGalleryItemClickListener galleryItemClickListener) {
this.mList = verticalList;
this.mContext = context;
mOnGalleryItemClickListener = galleryItemClickListener;
}
private int DptoPx(int px){
return (int) (px/ Resources.getSystem().getDisplayMetrics().density);
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView;
switch (viewType) {
case 1:
itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.main_video_gallery_layout, parent, false);
return new MainVideoViewHolder(itemView);
case 2:
itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.grid_item_layout, parent, false);
return new MyViewHolder(itemView);
}
return null;
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
int height = DptoPx(heaightSize[position % 9]);
if (holder instanceof MainVideoViewHolder) {
try {
Glide.with(mContext).load((new File(mContext.getExternalFilesDir(null) + "/" + mList.get(position))))
.thumbnail(0.1f)
.crossFade().override(500,500)
.placeholder(R.drawable.placeholder)
.diskCacheStrategy(DiskCacheStrategy.RESULT)
.listener(new RequestListener<File, GlideDrawable>() {
@Override
public boolean onException(Exception e, File model, Target<GlideDrawable> target, boolean isFirstResource) {
((MainVideoViewHolder) holder).progressBar.setVisibility(View.GONE);
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, File model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
((MainVideoViewHolder) holder).progressBar.setVisibility(View.GONE);
return false;
}
})
.into(((MainVideoViewHolder) holder).image_main_video);
} catch (RuntimeException ex) {
// Assume this is a corrupt video file.
}
((MainVideoViewHolder) holder).text_main_video_name.setText(mList.get(position).replace(Constant.FILE_EXTENSION, ""));
((MainVideoViewHolder) holder).text_datetime.setText(getFilecreationDate(mList.get(position)));
((MainVideoViewHolder) holder).image_main_video.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String value = mList.get(position);
if (mOnGalleryItemClickListener != null) {
mOnGalleryItemClickListener.onGalleryItemClicked(value);
}
}
});
} else {
try {
// ((MyViewHolder) holder).rl_mainlayout.getLayoutParams().height=height;
Glide.with(mContext).load((new File(mContext.getExternalFilesDir(null) + "/" + mList.get(position))))
.thumbnail(0.1f)
.crossFade()
.override(600, 200)
.diskCacheStrategy(DiskCacheStrategy.RESULT)
.listener(new RequestListener<File, GlideDrawable>() {
@Override
public boolean onException(Exception e, File model, Target<GlideDrawable> target, boolean isFirstResource) {
((MyViewHolder) holder).progressBar.setVisibility(View.GONE);
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, File model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
((MyViewHolder) holder).progressBar.setVisibility(View.GONE);
return false;
}
})
.into(((MyViewHolder) holder).image_tumbnail);
} catch (RuntimeException ex) {
// Assume this is a corrupt video file.
}
((MyViewHolder) holder).text_video_name.setText(mList.get(position).replace(Constant.FILE_EXTENSION, ""));
((MyViewHolder) holder).text_date_time.setText(getFilecreationDate(mList.get(position)));
((MyViewHolder) holder).image_tumbnail.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String value = mList.get(position);
if (mOnGalleryItemClickListener != null) {
mOnGalleryItemClickListener.onGalleryItemClicked(value);
}
}
});
}
}
@Override
public int getItemCount() {
if (mList == null)
return 0;
return mList.size();
}
@Override
public int getItemViewType(int position) {
if (mList != null) {
if (position == 0) {
return 1;
} else {
return 2;
}
}
return 0;
}
private String getFilecreationDate(String fileName) {
String filePath = mContext.getExternalFilesDir(null) + "/" + fileName;
File from = new File(filePath);
if (from.exists()) {
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
return sdf.format(new Date(from.lastModified()));
}
return "";
}
public static class MainVideoViewHolder extends RecyclerView.ViewHolder {
public final TextView text_main_video_name;
public final TextView text_datetime;
public final ImageView image_main_video;
public final ProgressBar progressBar;
public MainVideoViewHolder(View itemView) {
super(itemView);
text_main_video_name = (TextView) itemView.findViewById(R.id.text_main);
text_datetime = (TextView) itemView.findViewById(R.id.text_datetime);
image_main_video = (ImageView) itemView.findViewById(R.id.image_main_video);
progressBar=(ProgressBar) itemView.findViewById(R.id.progress);
}
}
public class MyViewHolder extends RecyclerView.ViewHolder {
public final TextView text_video_name;
public final CardView card_containter;
public final TextView text_date_time;
public final ProgressBar progressBar;
private final ImageView image_tumbnail;
private final LinearLayout rl_mainlayout;
public MyViewHolder(View view) {
super(view);
text_video_name = (TextView) view.findViewById(R.id.text_video_name);
card_containter = (CardView) view.findViewById(R.id.card_container);
text_date_time = (TextView) view.findViewById(R.id.text_date_time);
image_tumbnail = (ImageView) view.findViewById(R.id.image_main_video);
progressBar = (ProgressBar) itemView.findViewById(R.id.progress);
rl_mainlayout=(LinearLayout) itemView.findViewById(R.id.rl_main_layout);
}
}
}
这是我的适配器类代码,我这样称呼 GalleryAdapter galleryAdapter = new GalleryAdapter(verticalList,
GalleryActivity.this, this);
GridLayoutManager verticalLayoutmanager
= new GridLayoutManager(GalleryActivity.this,2);
verticalLayoutmanager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
return position == 0 ? 2 : 1;
}
});
rv_videolist.setLayoutManager(verticalLayoutmanager);
rv_videolist.setAdapter(galleryAdapter);
我希望设置0位置项更大,这在下面的屏幕中正确,然后我想要设置位置1中等大小项目和位置2,3更小尺寸然后第4位中等大小和第5和第6小尺寸分别。我当前的屏幕在
之下预期屏幕:预期位置零应如下所示,一行中有2项:
答案 0 :(得分:1)
您的代码太长,但下面可能是关键。
public int getSpanSize(int position) {
return position == 0 ? 2 : 1;
}
getSpanSize
应返回要占用的单元格大小。
因此,返回2
位置0
,网格大小2
表示全宽,其他网格返回1
,网格大小2
表示半宽。
如果您希望第一行具有全宽,并且在每行之后有3个尺寸为2:1:1的项目,则网格大小为4
new GridLayoutManager(GalleryActivity.this, 4);
分别拥有SpanSizeLookup。请注意,position
不是列位置,而是整个项目中的位置。
public int getSpanSize(int position) {
// first item is full width
position 1, 4, 7... is medium, other will be small
return position == 0 ? 4 : position % 3 == 1 ? 2 : 1;
}
我不确定我是否正确理解了你的逻辑,但希望它会有所帮助