Android使用Recycler View实现瀑布流效果

时间:2024-10-08 08:19:35

下图是淘宝上瀑布流的一个应用场景,今天我们就来用Recycler View实现以下瀑布流效果

一:创建Activity

activity中 核心代码为

(new StaggeredGridLayoutManager(2,));

该行代码使用layoutmanager实现一个两列的垂直布局,API解释如下

new StaggeredGridLayoutManager(行数/列数,水平/垂直)

  1. package .;
  2. import ..AppCompatActivity;
  3. import .Bundle;
  4. import ..RecyclerView;
  5. import ..StaggeredGridLayoutManager;
  6. import .demo4.R;
  7. public class PuRecyclerViewActivity extends AppCompatActivity {
  8. private RecyclerView mRvPu;
  9. @Override
  10. protected void onCreate(Bundle savedInstanceState) {
  11. super.onCreate(savedInstanceState);
  12. setContentView(R.layout.activity_pu_recycler_view);
  13. mRvPu=(RecyclerView)findViewById(R.id.rv_pu);
  14. //设置布局方式,2列,垂直
  15. (new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL));
  16. (new StaggeredGridAdapter(PuRecyclerViewActivity.this));
  17. }
  18. }

二:Adapter的构建

没什么特别的地方

  1. package .;
  2. import ;
  3. import .;
  4. import ;
  5. import ;
  6. import ;
  7. import ;
  8. import ;
  9. import ;
  10. import ;
  11. import .;
  12. import ;
  13. import ;
  14. public class StaggeredGridAdapter extends RecyclerView.Adapter<>{
  15. private Context mContext;
  16. private mListener;
  17. private List<String> list=new ArrayList<>();
  18. public StaggeredGridAdapter(Context mContext) {
  19. this.mContext = mContext;
  20. for(int i=0;i<30;i++){
  21. (("%s-%s", i/10+1,i));
  22. }
  23. }
  24. @Override
  25. public onCreateViewHolder(ViewGroup parent, int viewType) {
  26. return new LinearViewHolder((mContext).inflate(.layout_staggere_grid_item,parent,false));
  27. }
  28. @Override
  29. public void onBindViewHolder( holder, int position) {
  30. if(position%2==0){
  31. (.baby1);
  32. }
  33. else{
  34. (.baby2);
  35. }
  36. }
  37. @Override
  38. public int getItemCount() {
  39. return 30;
  40. }
  41. class LinearViewHolder extends RecyclerView.ViewHolder{
  42. private ImageView mImageView;
  43. public LinearViewHolder(View itemView){
  44. super(itemView);
  45. mImageView=(ImageView) ();
  46. }
  47. }
  48. }

三:布局文件 layout_staggere_grid_item.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout
  3. xmlns:android="/apk/res/android"
  4. android:layout_width="match_parent"
  5. android:layout_height="wrap_content"
  6. android:orientation="vertical">
  7. <ImageView
  8. android:id="@+id/iv"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:layout_margin="2dp"
  12. android:scaleType="centerCrop"/>
  13. </LinearLayout>

当运行时候可得到如下效果,自此一个瀑布流就实现了,之后可以根据业务场景写点击事件或是UI上加入TextView做其他用途等,这里有可能会有OOM问题,下次在讲啦