错乱对称的瀑布流

现在的界面大同小异一点新意也没有,最近看到一种布局界面还比较好看,我试着用自定义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);

        }

}

好了今天的撸码结束 觉得可以的老铁点个赞呗

源码下载 请点击这里

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。