RecyclerView item 可展开动画效果的实现
前文提要:
Android list 列表里面空间的显示和 隐藏,基本都是用的View.VISIBLE 和 View.GONE 实现的,展示的效果有点突兀,看了ios 同事做的相同的效果,他们的很顺畅,所以决定做一个相同的效果.
已经上传到github 上面地址是 demo的项目地址 :https://github.com/luhui2014/ExpandableViewHolder/tree/master
1.相关说明:
参考资料:Android—RecyclerView之动画(工具类)实现可展开列表
1-1.布局文件:
将需要展开收缩的那部分布局的透明度在xml文件里默认设置为0,在代码中设置一样
1-2.动画工具类说明(代码我基本上都添加了注释):
这里我就不赘述了,请参考原文 Android—RecyclerView之动画(工具类)实现可展开列表
相关原理就是:利用属性动画,动态计算view展开后的高度,实现动画效果。中间插了一段alpha 的动画,为了过渡显示,关键代码:
//OpenHolder中动画的具体操作方法
public static Animator ofItemViewHeight(RecyclerView.ViewHolder holder) {
View parent = (View) holder.itemView.getParent();
if (parent == null)
throw new IllegalStateException("Cannot animate the layout of a view that has no parent");
//测量扩展动画的起始高度和结束高度
int start = holder.itemView.getMeasuredHeight();
holder.itemView.measure(View.MeasureSpec.makeMeasureSpec(parent.getMeasuredWidth(),
View.MeasureSpec.AT_MOST), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
int end = holder.itemView.getMeasuredHeight();
final Animator animator &#