Android仿qq分组管理的第三方库

  

本文实例为大家分享了Android仿qq分组管理的第三方库,供大家参考,具体内容如下

  

下面先看效果,
  

  

 Android仿qq分组管理的第三方库

  

我们点击展开与折叠分组的功能在库里面是已经封装好的,只能把它已入到项目中,就可以直接用了,十分的方便。

  

下面直接上<强>核心代码
  

  

首先定义分组的对象,相当于上面红色字体的对象,跟分组下每个项的对象,
  创建分组的ViewHolder继承第三方库的ParentViewHolder,代码如下(由于父类没有无参构造,所以必须实现父类的一个有参构造,传入的参数相信大家也很清楚):
  

     /* *   *分组的ViewHolder   */公开课TeamViewHolder延伸ParentViewHolder {/* *   *默认构造函数。   *   * @param itemView} {@link视图被ViewHolder主持   */公共TeamViewHolder (@NonNull视图itemView) {   超级(itemView);   }   }      

既然有每个分组的ViewHolder,就会有每个分组下面子条目的ViewHolder下面就来创建该ViewHolder,实现方式跟上面是一样的,连名字也是十分的明确的,一个是父母,一个是孩子:
  

        公开课PlayerViewHolder延伸ChildViewHolder {   私人最终TextView mIngredientTextView;/* *   *默认构造函数。   *   * @param itemView} {@link视图被ViewHolder主持   */公共PlayerViewHolder (@NonNull视图itemView) {   超级(itemView);   mIngredientTextView=((TextView) itemView.findViewById (R.id.ingredient_textview));   }   }      

创建完ViewHolder之后,可以说功能已经完成一半了,剩下的类想必大家都不陌生,就是适配器,有列表的视图,就得有适配器来绑定数据,下面直接上代码,也是继承第三方库的适配器,所以我们根本不用想要写什么方法,只有把要实现的方法实现了,就完事:
  

  

        公共类TeamAdapter ExpandableRecyclerAdapter<延伸;团队球员,TeamViewHolder, PlayerViewHolder>{   私人最终LayoutInflater mInflater;/* *   *主构造函数。设置{@link # mParentList}和{@link # mFlatItemList}。   * & lt; p>   *任何更改应该{@link # mParentList}>//首先要给recyclerview设置一个布局管理器   recyclerView。setLayoutManager(新LinearLayoutManager ());//第一个球队的所有球员   List,players1=new ArrayList<的在();//第二个球队的所有球员   List,players2=new ArrayList<的在();//第三个球队的所有球员   List,players3=new ArrayList<的在();//所有球队的集合   List,团队=new ArrayList<的在();//创建每个球队,传入的参数是队名跟队员   团队团队=新团队(名为teamname [0], players1);   团队team2=新团队(名为teamname [1], players2);   团队team3=新团队(名为teamname [2], players3);   teams.add(团队);   teams.add (team2);   teams.add (team3);//适配器传入的数据源是所有球队的集合   TeamAdapter适配器=new TeamAdapter(团队);   recyclerView.setAdapter(适配器);      

到这里,数据已经可以显示了,效果就跟上面的图一样,但是每个分组后面的箭头是不会动的,接下来就是给箭头添加旋转动画。实现也是十分简单,只要在TeamViewHolder中重写父类的一个方法就行了,当然,里面的旋转逻辑是根据实际情况去实现的:

        私有静态最终浮INITIAL_POSITION=-90 f;   私有静态最终浮ROTATED_POSITION f=0.0;   @Override   公共空间setExpanded(布尔扩大){   super.setExpanded(扩大);   RotateAnimation风湿性关节炎;   如果(扩大){//由展开到收起状态   ra=new RotateAnimation (   ROTATED_POSITION,//展开状态角度   INITIAL_POSITION,//收起状态角度   RotateAnimation。RELATIVE_TO_SELF,//相对于自己的中心点   0.5 f,   Animation.RELATIVE_TO_SELF,   0.5 f);   其他}{   ra=new RotateAnimation (   INITIAL_POSITION,   ROTATED_POSITION,   Animation.RELATIVE_TO_SELF,   0.5 f,   Animation.RELATIVE_TO_SELF,   0.5 f);   }   ra.setDuration (200);   ra.setFillAfter(真正的);   mArrowExpandImageView.startAnimation (ra);   }      

我这里实现的就是上图的效果,其实就是旋转动画的实现。需要讲解一下的是,setExpanded()这个方法在内部已经帮我们调用了,传进去的参数为真时,说明该分组是打开的,错误则表示该分组没打开,只要根据这个值做相关的处理,就可以得到想要的效果。

Android仿qq分组管理的第三方库