简体   繁体   English

如何在 Android 中构建像 Play Store 这样的自定义水平回收器视图?

[英]How to build a custom horizontal recycler view like Play Store in Android?

Playstore 回收站视图

I already know how to make horizontal RecyclerView, but I want to make a custom recycler view having a blank space at the starting , and when we start to scroll the background image gets faded.我已经知道如何制作水平 RecyclerView,但我想制作一个自定义回收器视图,在开始时有一个空白区域,当我们开始滚动时,背景图像会变淡。

  • just make your adapter pretend to be having more data than it actually has.只是让你的适配器假装拥有比实际更多的数据。 when it gives you position <n (n: number of items you want empty at the beginning) don't load any image into and leave it empty.当它给你position <n (n:你想要在开始时清空的项目数)时,不要加载任何图像并将其留空。 when it asks about the data size in getItemCount() return your data size + 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;
    }
}

  • you might also make use of the view Type value by overriding method getItemViewType and return value that indicates if you want this view holder to be empty or to have another behavior than the regular view holder.您还可以通过覆盖方法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 ;
    }
}

where your type 1 in this case would be the empty view holder.在这种情况下,您的类型 1 将是空视图持有者。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM