Android实现上拉吸顶效果



实现Android上的上拉吸顶效果,可以使用ScrollViewRecyclerView sticky_headers库。以下是一个使用 RecyclerView 的基本示例:

首先,在你的 build.gradle 文件中添加 sticky_headers 依赖:

dependencies {  
    implementation 'com.prolificinteractive:sticky-headers:1.0.6'  
}

然后在你的布局文件中添加 RecyclerView

<androidx.recyclerview.widget.RecyclerView  
    android:id="@+id/recycler_view"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:clipToPadding="false"  
    android:paddingStart="16dp"  
    android:paddingEnd="16dp"  
    android:scrollbars="none" />

接下来,在你的 Activity 或 Fragment 中设置 RecyclerView 的 Adapter:

RecyclerView recyclerView = findViewById(R.id.recycler_view);  
StickyHeaderAdapter adapter = new StickyHeaderAdapter(yourDataList, yourItemDecoration);  
recyclerView.setAdapter(adapter);

其中 yourDataList 是你的数据列表,yourItemDecoration 是你的 ItemDecoration。你需要创建一个 StickyHeaderAdapter 并将其设置为你的 RecyclerView 的 Adapter。以下是一个基本的 StickyHeaderAdapter 的示例:

public class StickyHeaderAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {  
    private final List<YourData> data;  
    private final int stickyHeaderSize;  
    private final Context context;  
    private final ItemDecoration itemDecoration;  
  
    public StickyHeaderAdapter(List<YourData> data, ItemDecoration itemDecoration) {  
        this.data = data;  
        this.stickyHeaderSize = 1; // 因为我们只有一个头部,所以设为1  
        this.context = context;  
        this.itemDecoration = itemDecoration;  
    }  
  
    @NonNull  
    @Override  
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {  
        if (viewType == stickyHeaderSize) { // 创建头部视图  
            return new YourHeaderViewHolder(LayoutInflater.from(context).inflate(R.layout.your_header_layout, parent, false));  
        } else { // 创建普通视图  
            return new YourViewHolder(LayoutInflater.from(context).inflate(R.layout.your_item_layout, parent, false));  
        }  
    }  
  
    @Override  
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {  
        if (getItemViewType(position) == stickyHeaderSize) { 
            return; // }