【问题标题】:How to build a custom horizontal recycler view like Play Store in Android?如何在 Android 中构建像 Play Store 这样的自定义水平回收器视图?
【发布时间】:2021-11-19 17:36:45
【问题描述】:

我已经知道如何制作水平 RecyclerView,但我想制作一个在开始时有一个空白区域的自定义回收器视图,并且当我们开始滚动时,背景图像会褪色。

【问题讨论】:

  • 所有这些都可以通过回收站视图完成。对于空白区域,只需让您的适配器假装比实际多 1 个项目,然后将所有内容移动一个(因此我们的第一个真正项目是索引 1,而不是索引 0)。淡化背景可以在 onScrollListener 中完成。

标签: java android android-layout android-recyclerview


【解决方案1】:
  • 只需让您的适配器假装拥有比实际拥有的更多的数据。 当它为您提供position <n(n:您希望在开始时为空的项目数)时,不要加载任何图像并将其留空。 当它询问getItemCount() 中的数据大小时,返回your data size + n
public class MyAdapter extends RecyclerView.Adapter<MyViewHolder>{
    ...
    private final int N  =2 ;
    @Override
    public PageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {...}
    @Override
    public void onBindViewHolder(@NonNull PageViewHolder holder, int position) {
         if(position <N)return ;
         else {
             // bind your holder with data
         }
    }

    @Override
    public int getItemCount() {
        return pageEntities.size() +N;
    }
}

  • 您还可以通过覆盖方法 getItemViewType 来使用视图类型值,并返回值指示您是否希望此视图持有者为空或具有与常规视图持有者不同的行为。
public class MyAdapter extends RecyclerView.Adapter<MyViewHolder>{
    ...
    private final int N  =2 ;
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
         View v ;
         if(viewType ==0){
             v = LayoutInflater.from(context).inflate(R.layout.view_holder_item_1, parent, false);
         }else {
             v = LayoutInflater.from(context).inflate(R.layout.view_holder_item_2, parent, false);
         }
         return new new MyViewHolder(v.getRootView()) ;
}
    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
         if(position <N){
             // bind your holder view of type 1 with data you want
         }
         else {
             // bind your holder view of type 2 with data you want
         }
    }

    @Override
    public int getItemCount() {
        return pageEntities.size() +N;
    }
    @Override
    public int getItemViewType(int position) {
        return position <N ?0:1 ;
    }
}

在这种情况下,您的类型 1 将是空视图持有者。

【讨论】:

  • 非常感谢。❤❤❤❤
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-07
  • 2017-02-10
  • 1970-01-01
  • 2021-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多