android 怎么写瀑布流
时间: 2023-08-16 13:10:04 浏览: 43
在 Android 中,可以使用 `RecyclerView` 和 `GridLayoutManager` 实现瀑布流布局。
1. 首先,在布局文件中添加一个 `RecyclerView`,并设置其布局管理器为 `GridLayoutManager`:
```xml
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:spanCount="2" />
```
这里使用了 `app:layoutManager` 属性来设置布局管理器,并使用了 `app:spanCount` 属性来指定每行的列数。
2. 然后,在 Java/Kotlin 代码中为 `RecyclerView` 设置适配器,并在适配器中实现瀑布流布局。例如:
```java
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
// 数据源
private List<MyData> mDataList;
// 构造方法
public MyAdapter(List<MyData> dataList) {
mDataList = dataList;
}
// 创建 ViewHolder
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_my_data, parent, false);
return new ViewHolder(view);
}
// 绑定 ViewHolder
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
MyData data = mDataList.get(position);
holder.imageView.setImageResource(data.getImageResId());
holder.textView.setText(data.getTitle());
// 瀑布流布局:根据数据中的宽高比动态调整高度
float ratio = data.getWidth() / data.getHeight();
holder.imageView.getLayoutParams().height = (int) (holder.imageView.getWidth() / ratio);
}
// 获取数据源大小
@Override
public int getItemCount() {
return mDataList.size();
}
// ViewHolder
public static class ViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
TextView textView;
public ViewHolder(View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.image_view);
textView = itemView.findViewById(R.id.text_view);
}
}
}
```
这里的 `MyData` 类表示每个数据项,包含了图片资源 ID、标题、宽度和高度等信息。在 `onBindViewHolder` 方法中,根据数据中的宽高比动态调整图片的高度,从而实现瀑布流布局。
3. 最后,将数据源和适配器绑定到 `RecyclerView` 上即可:
```java
List<MyData> dataList = getDataList(); // 获取数据源
MyAdapter adapter = new MyAdapter(dataList); // 创建适配器
RecyclerView recyclerView = findViewById(R.id.recyclerView); // 获取 RecyclerView
recyclerView.setAdapter(adapter); // 设置适配器
```
这样,就可以实现瀑布流布局了。