记一次ExpansionPanel(扩展效果)的实现

先看效果
记一次ExpansionPanel(扩展效果)的实现_第1张图片
这种效果实现的思路其实很简单,就把要显示的的和要折叠的内容分为两部分,折叠的内容默认为不显示,当点击按钮的时候就把它显示出来,其实难点在于折叠显示的动画,我是直接参考别人的代码的,看了之后其实也并不难,只能说我对api不熟悉;不多bb直接上代码:

首先是布局没什么好说




   


RecyclerView子布局




    

        

            

            

        
        
		
        

            

            

            

                

                

这里只贴出动画实现代码

 public static Animation expandAction(final View view, final boolean isShow, Animation.AnimationListener animationListener) {
        view.measure(-1, -2);
        final int measuredHeight = view.getMeasuredHeight();
        if(isShow) {
            view.getLayoutParams().height = 0;
            view.setVisibility(View.VISIBLE);
        }

        Animation animation = new Animation() {
            public boolean willChangeBounds() {
                return true;
            }
            public void applyTransformation(float f, Transformation transformation) {
                int showHeight;
                if(isShow){
                    //显示出来
                    showHeight = f == 1.0f ? -2 : (int) (((float) measuredHeight) * f);
                }else {
                    //收起来
                    showHeight = f == 1.0f ? -2 : measuredHeight - (int) (((float) measuredHeight) * f);
                }
                view.getLayoutParams().height = showHeight;
                view.requestLayout();
            }
        };
        animation.setDuration((long) ((int) (((float) measuredHeight) / view.getContext().getResources().getDisplayMetrics().density)));
        if(animationListener != null){
            animation.setAnimationListener(animationListener);
        }
        view.startAnimation(animation);
        return animation;
    }

动画的实现是靠不断改变View的高度来实现折叠效果的,我看了别人的代码才知道有 view.requestLayout()这个API,知道这个API就很好实现了,每改变一次高度然后调用一次view.requestLayout()效果就出来了,这里的动画应该可以使用VauleAnimation实现的,我没试过。还有重写Animation这种操作我也是第一次见,看来多看别人的代码可以学习到很多啊!

近期我决定把我们学校的考勤助手这个app的界面用MD实现一下,不得不吐槽这个软件又丑又难用

你可能感兴趣的:(记一次ExpansionPanel(扩展效果)的实现)