RecyclerView的网格布局和瀑布流布局

这个是我上一篇关于的补充,上一篇说的详细一点,戳这里

1.网格布局


(https://blog.csdn.net/qq_39326574/article/details/98098520)
实现网格视图的关键代码

//定义布局管理器为Grid管理器,设置一行放3个
RecyclerView.LayoutManager layoutManager=new GridLayoutManager(this,3);
//给RecyclerView添加布局管理器
mRecyclerView.setLayoutManager(layoutManager);

下面给出所有代码:
三个类,两个布局文件,七张图。
图片链接:https://pan.baidu.com/s/11aZcT4pKdHkSz3DmBV2z7A
提取码:pl6i

  • activity_mian.xml





  • fruit.xml
    用来放置每一种水果和图片


    
    

  • Friut.java
    fruit实体类,说来惭愧,拼错了,懒得改了
public class Friut {
    String name;
    int imageResourceID;

    public Friut(String name, int imageResourceID) {
        this.name = name;
        this.imageResourceID = imageResourceID;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getImageResourceID() {
        return imageResourceID;
    }

    public void setImageResourceID(int imageResourceID) {
        this.imageResourceID = imageResourceID;
    }
}
  • MyAdapter
public class MyAdapter extends RecyclerView.Adapter {
    ArrayList mFriutArrayList;
    public MyAdapter(ArrayList list) {
        mFriutArrayList=list;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {//用来创建ViewHolder实例,再将加载好的布局传入构造函数,最后返回ViewHolder实例
        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit,null);
        ViewHolder holder=new ViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) { //用于对RecyclerView的子项进行赋值,会在每个子项滚动到屏幕内的时候执行
        holder.iv.setImageResource(mFriutArrayList.get(position).getImageResourceID());
        holder.tv.setText(mFriutArrayList.get(position).getName());
    }

    @Override
    public int getItemCount() {
        return mFriutArrayList.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        TextView tv;
        ImageView iv;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            tv=itemView.findViewById(R.id.tv);
            iv=itemView.findViewById(R.id.iv);
        }

    }
}
  • MainActivity.java
public class MainActivity extends AppCompatActivity {
    RecyclerView mRecyclerView;
    ArrayList list=new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mRecyclerView=findViewById(R.id.rv);
        initFruit();
        //定义布局管理器为Grid管理器,设置一行放3个
        RecyclerView.LayoutManager layoutManager=new GridLayoutManager(this,3);
        //给RecyclerView添加布局管理器
        mRecyclerView.setLayoutManager(layoutManager);
        MyAdapter adapter=new MyAdapter(list);
        mRecyclerView.setAdapter(adapter);
         }

    private void initFruit() {
        for (int i = 0; i <20 ; i++) {
        Friut friut=new Friut("苹果",R.mipmap.apple_pic);
        list.add(friut);
        Friut friut1=new Friut("香蕉",R.mipmap.banana_pic);
        list.add(friut1);
        Friut friut2=new Friut("樱桃",R.mipmap.cherry_pic);
        list.add(friut2);
        Friut friut3=new Friut("葡萄",R.mipmap.grape_pic);
        list.add(friut3);
        Friut friut4=new Friut("橘子",R.mipmap.orange_pic);
        list.add(friut4);
        Friut friut5=new Friut("梨子",R.mipmap.pear_pic);
        list.add(friut5);
        Friut friut6=new Friut("西瓜",R.mipmap.watermelon_pic);
        list.add(friut6);
        }
    }
}

2.瀑布流布局

更改上面的布局管理器:

//定义布局管理器为StaggeredGridLayoutManager管理器,设置一行放2个,垂直布局
RecyclerView.LayoutManager layoutManager=new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
//给RecyclerView添加布局管理器
mRecyclerView.setLayoutManager(layoutManager);

更改initFruit()

 private void initFruit() {
        for (int i = 0; i <20 ; i++) {
        Friut friut1=new Friut("香蕉",R.mipmap.bigbanana);
        list.add(friut1);
        Friut friut=new Friut("苹果",R.mipmap.apple_pic);
        list.add(friut);
        }
    }

效果图

  • 继续更改上面的布局管理器:
//定义布局管理器为StaggeredGridLayoutManager管理器,设置一行放2个,水平布局
RecyclerView.LayoutManager layoutManager=new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
//给RecyclerView添加布局管理器
mRecyclerView.setLayoutManager(layoutManager);

效果

你可能感兴趣的:(android入门笔记)