现在的界面大同小异一点新意也没有,最近看到一种布局界面还比较好看,我试着用自定义view但是太麻烦了,最终选用recycle来实现的,先上一波图大伙看看
说起来实现起来难度不是很大,就是adapter里面计算图片的大小尺寸以及每个图片对应的位置比较麻烦,当然也怕计算过多滑动会卡顿,不过还好都是复用影响不到,对每张图片我还特地自定义ImageView画了圆角,废话不多说上代码
public class StaggerAdapterextends RecyclerView.Adapter {
private Listlists;
private ContextmContext;
//将图片布局类型一共分为了三类当然你们可以接着加喔
private int type_one =0x001;
private int type_two =0x002;
private int type_three =0x003;
private int mWidth;
private int eachValue;
private int padding =15;
public StaggerAdapter(Context mContext, int mWidth, List lists) {
this.mContext = mContext;
this.mWidth = mWidth;
this.lists = lists;
int padding_px = DipUtils.dip2px(mContext, padding);
eachValue = (mWidth - padding_px *3) /3;
Log.d("===", eachValue +"eachValue");
}
@NonNull
@Override
public RecyclerView.ViewHolderonCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (viewType ==type_one) {
View inflate = LayoutInflater.from(mContext).inflate(R.layout.item_one, parent, false);
return new ViewHolderOne(inflate);
}else if (viewType ==type_two) {
View inflate = LayoutInflater.from(mContext).inflate(R.layout.item_two, parent, false);
return new ViewHolderTwo(inflate);
}else {
View inflate = LayoutInflater.from(mContext).inflate(R.layout.item_three, parent, false);
return new ViewHolderThree(inflate);
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
Integer pic1 =0;
Integer pic2 =0;
Integer pic3 =0;
int num=(position+1)/3;
int currentPosition=num*7;
if (holderinstanceof ViewHolderOne) {
if (currentPosition <=lists.size()-1) {
pic1 =lists.get(currentPosition);
}
if (currentPosition+1 <=lists.size()-1) {
pic2 =lists.get(currentPosition+1);
}
if (currentPosition +2 <=lists.size()-1) {
pic3 =lists.get(currentPosition +2);
}
ViewHolderOne viewHolderOne = (ViewHolderOne) holder;
ViewGroup.LayoutParams layoutParams = viewHolderOne.oneLeft.getLayoutParams();
layoutParams.width =eachValue *2;
layoutParams.height =eachValue *2;
viewHolderOne.oneLeft.setLayoutParams(layoutParams);
viewHolderOne.oneLeft.requestLayout();
if (pic1 !=0) {
viewHolderOne.oneLeft.setImageResource(pic1);
}else {
viewHolderOne.oneLeft.setImageResource(0);
}
ViewGroup.LayoutParams right_layout_p = viewHolderOne.oneRightLayout.getLayoutParams();
right_layout_p.height =eachValue *2;
viewHolderOne.oneRightLayout.setLayoutParams(right_layout_p);
viewHolderOne.oneRightLayout.requestLayout();
if (pic2 !=0) {
viewHolderOne.oneRight1.setImageResource(pic2);
}else {
viewHolderOne.oneRight1.setImageResource(0);
}
if (pic3 !=0) {
viewHolderOne.oneRight2.setImageResource(pic3);
}else {
viewHolderOne.oneRight2.setImageResource(0);
}
}else if (holderinstanceof ViewHolderTwo){
if (currentPosition+3<=lists.size()-1) {
pic1 =lists.get(currentPosition+3);
}
if (currentPosition+4 <=lists.size()-1) {
pic2 =lists.get(currentPosition+4);
}
if (currentPosition +5 <=lists.size()-1) {
pic3 =lists.get(currentPosition +5);
}
ViewHolderTwo viewHolderTwo = (ViewHolderTwo) holder;
ViewGroup.LayoutParams layoutParams = viewHolderTwo.twoLeftLayout.getLayoutParams();
layoutParams.width =eachValue;
layoutParams.height =eachValue *2;
viewHolderTwo.twoLeftLayout.setLayoutParams(layoutParams);
viewHolderTwo.twoLeftLayout.requestLayout();
viewHolderTwo.twoLeft1.setImageResource(pic1);
viewHolderTwo.twoLeft2.setImageResource(pic2);
ViewGroup.LayoutParams two_right_lp = viewHolderTwo.twoRight.getLayoutParams();
two_right_lp.height =eachValue *2;
viewHolderTwo.twoRight.setLayoutParams(two_right_lp);
viewHolderTwo.twoRight.requestLayout();
viewHolderTwo.twoRight.setImageResource(pic3);
}else {
ViewHolderThree viewHolderThree= (ViewHolderThree) holder;
ViewGroup.LayoutParams item_three_lp = viewHolderThree.itemTwoIv.getLayoutParams();
item_three_lp.height=eachValue;
viewHolderThree.itemTwoIv.setLayoutParams(item_three_lp);
viewHolderThree.itemTwoIv.requestLayout();
viewHolderThree.itemTwoIv.setImageResource(lists.get(currentPosition-1));
}
}
@Override
public int getItemCount() {
int out_num =lists.size() /7;
int last_num =lists.size() %7;
int int_num = (int) Math.ceil((double) last_num /3);
// Log.d("===",(int) Math.ceil((double)lists.size()/3)+"count");
return out_num *3 + int_num;
}
@Override
public int getItemViewType(int position) {
int i = position %3;
if (i ==0) {
return type_one;
}else if (i ==1) {
return type_two;
}else {
return type_three;
}
}
static class ViewHolderOneextends RecyclerView.ViewHolder {
@Bind(R.id.one_left)
ImageViewoneLeft;
@Bind(R.id.one_right1)
ImageViewoneRight1;
@Bind(R.id.one_right2)
ImageViewoneRight2;
@Bind(R.id.one_rightLayout)
LinearLayoutoneRightLayout;
ViewHolderOne(View view) {
super(view);
ButterKnife.bind(this, view);
}
}
static class ViewHolderTwoextends RecyclerView.ViewHolder {
@Bind(R.id.two_left1)
ImageViewtwoLeft1;
@Bind(R.id.two_left2)
ImageViewtwoLeft2;
@Bind(R.id.two_leftLayout)
LinearLayouttwoLeftLayout;
@Bind(R.id.two_right)
ImageViewtwoRight;
ViewHolderTwo(View view) {
super(view);
ButterKnife.bind(this, view);
}
}
static class ViewHolderThreeextends RecyclerView.ViewHolder {
@Bind(R.id.item_twoIv)
ImageViewitemTwoIv;
ViewHolderThree(View view) {
super(view);
ButterKnife.bind(this, view);
}
}
好了今天的撸码结束 觉得可以的老铁点个赞呗