現(xiàn)在的界面大同小異一點(diǎn)新意也沒有,最近看到一種布局界面還比較好看舵抹,我試著用自定義view但是太麻煩了肪虎,最終選用recycle來實(shí)現(xiàn)的,先上一波圖大伙看看
說起來實(shí)現(xiàn)起來難度不是很大惧蛹,就是adapter里面計(jì)算圖片的大小尺寸以及每個(gè)圖片對(duì)應(yīng)的位置比較麻煩笋轨,當(dāng)然也怕計(jì)算過多滑動(dòng)會(huì)卡頓,不過還好都是復(fù)用影響不到赊淑,對(duì)每張圖片我還特地自定義ImageView畫了圓角,廢話不多說上代碼
public class StaggerAdapterextends RecyclerView.Adapter {
private Listlists;
? ? private ContextmContext;
//將圖片布局類型一共分為了三類當(dāng)然你們可以接著加喔
? 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);
? ? ? ? }
}
好了今天的擼碼結(jié)束 覺得可以的老鐵點(diǎn)個(gè)贊唄