<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Android實(shí)現(xiàn)瀑布流社區(qū)動(dòng)態(tài)功能

          共 3694字,需瀏覽 8分鐘

           ·

          2022-05-30 14:22

          引言


          相信大家一定見過小紅書等社交類app的社區(qū)動(dòng)態(tài),里面有許多美輪美奐的瀑布流美景美圖,掀起了很多美食、美景、網(wǎng)紅店的浪潮。其實(shí)RecyclerView就能實(shí)現(xiàn)這種流形式的布局,LinearLayoutManager是線性布局、GridLayoutManager是網(wǎng)格式布局、而StaggeredGridLayout是瀑布流布局,也就是我們常說的流布局。


          話不多說,趕快來看看怎么實(shí)現(xiàn)吧!上才藝,美圖雖好可不要貪杯哦!學(xué)好技術(shù)才是主要的!


          效果預(yù)覽


          用法


          第一步:布局文件(父布局+子布局)


          父布局(一個(gè)RecyclerView實(shí)現(xiàn))

          <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".blog.Case56">    <androidx.recyclerview.widget.RecyclerView        android:id="@+id/case56_rv"        android:background="@color/dimgray"        android:layout_width="match_parent"        android:layout_height="wrap_content"        tools:ignore="MissingConstraints" />androidx.constraintlayout.widget.ConstraintLayout>


          子布局(就是瀑布流中的item)

          <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    xmlns:app="http://schemas.android.com/apk/res-auto"    tools:ignore="MissingConstraints"    android:layout_margin="3dp">    <androidx.cardview.widget.CardView        android:layout_width="match_parent"        app:cardCornerRadius="5dp"        app:cardBackgroundColor="@color/white"        android:layout_height="wrap_content">        <androidx.constraintlayout.widget.ConstraintLayout            android:layout_width="match_parent"            android:layout_height="wrap_content">            <ImageView                android:id="@+id/sgl_image"                android:layout_width="180dp"                android:scaleType="centerCrop"                android:layout_height="300dp"                app:layout_constraintTop_toTopOf="parent"                android:src="@mipmap/guanggao"/>            <TextView                android:id="@+id/sgl_title"                android:layout_width="180dp"                android:padding="10dp"                android:layout_height="wrap_content"                app:layout_constraintTop_toBottomOf="@id/sgl_image"                android:text="測(cè)試"                android:textSize="20sp" />        androidx.constraintlayout.widget.ConstraintLayout>    androidx.cardview.widget.CardView>androidx.constraintlayout.widget.ConstraintLayout>


          第二步:創(chuàng)建適配器類(填充RecyclerView)


          ?public class ShequRecyclerAdapter extends RecyclerView.Adapter<ShequRecyclerAdapter.MyViewHolder> { private List fruitList;
          public ShequRecyclerAdapter(List fruitList) { this.fruitList = fruitList; }
          @NonNull @Override public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.stag_grid_layout, parent, false); final MyViewHolder holder = new MyViewHolder(itemView); return holder; }
          @Override public void onBindViewHolder(@NonNull MyViewHolder holder, int position) { Fruit fruitItem = fruitList.get(position); holder.sgl_image.setImageResource(fruitItem.getImageId()); holder.sgl_title.setText(fruitItem.getName()); }
          public static class MyViewHolder extends RecyclerView.ViewHolder { View fruitView; //圖片 public ImageView sgl_image; //標(biāo)題 public TextView sgl_title;
          public MyViewHolder(View itemView) { super(itemView); fruitView = itemView; sgl_image = itemView.findViewById(R.id.sgl_image); sgl_title = itemView.findViewById(R.id.sgl_title); } }
          @Override public int getItemCount() { return fruitList.size(); }
          }


          第三步:創(chuàng)建實(shí)體類(圖片+文字形式)

          public class Fruit {    private String name;    private int imageId;    private int type;
          public Fruit(String name, int imageId) { this.name = name; this.imageId = imageId; } public String getName() { return name; }
          public void setName(String name) { this.name = name; }
          public int getImageId() { return imageId; }
          public void setImageId(int imageId) { this.imageId = imageId; }}


          第四步:在Activity中書寫業(yè)務(wù)邏輯

          public class Case56 extends AppCompatActivity {    private RecyclerView recyclerView;    private ShequRecyclerAdapter adapter;    private StaggeredGridLayoutManager layoutManager;    private List mList = new ArrayList();

          @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_case56); initView(); setData(); setRecycler(); }
          private void setData() { //RecyclerView mList.add(new Fruit("千夜零一", R.drawable.meizi)); mList.add(new Fruit("RecylerView實(shí)現(xiàn)瀑布流布局StaggeredGridLayoutManager使用", R.drawable.meizi2)); mList.add(new Fruit("RecylerView實(shí)現(xiàn)瀑布流布局", R.drawable.meizi)); mList.add(new Fruit("RecylerView實(shí)現(xiàn)瀑布流布局StaggeredGridLayoutManager使用RecylerView實(shí)現(xiàn)瀑布流布局StaggeredGridLayoutManager使用RecylerView實(shí)現(xiàn)瀑布流布局StaggeredGridLayoutManager使用", R.drawable.meizi2)); mList.add(new Fruit("RecylerView", R.drawable.meizi)); mList.add(new Fruit("千夜零一千夜零一千夜零一千夜零一千夜零一", R.drawable.meizi2)); mList.add(new Fruit("千夜", R.drawable.meizi2));
          }

          private void setRecycler() { adapter = new ShequRecyclerAdapter(mList); layoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL); //每行兩個(gè)瀑布流排列 recyclerView.setLayoutManager(layoutManager); recyclerView.setAdapter(adapter); recyclerView.setItemAnimator(new DefaultItemAnimator()); }
          private void initView() { recyclerView = findViewById(R.id.case56_rv); }}


          大功告成!



          到這里就結(jié)束啦。

          瀏覽 91
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩成人久久 | 亚洲狼在线 | 9l视频自拍九色9l视频成人 | 日韩爽爽| 亚洲无吗中文字幕 |