本文实例为大家分享了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()这个方法在内部已经帮我们调用了,传进去的参数为真时,说明该分组是打开的,错误则表示该分组没打开,只要根据这个值做相关的处理,就可以得到想要的效果。