Android ExpandableListView using animation

后端 未结 5 2009
被撕碎了的回忆
被撕碎了的回忆 2020-12-05 05:39

I\'m using



        
5条回答
  •  北海茫月
    2020-12-05 05:51

    Found this snnipet not remebering where here in Stack Overflow. Have two basic static methods: expand(View v) and collapse(View v). You only have to pass the view you want to hide show.

    Note: I Don't recomend pass a view having wrap_content as height. May not work fine.

     public class expand {
    
        public static void expand(View view) {
            view.setVisibility(View.VISIBLE);
    
            final int widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
            final int heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
            view.measure(widthSpec, heightSpec);
    
            ValueAnimator mAnimator = slideAnimator(view, 0, view.getMeasuredHeight());
            mAnimator.start();
        }
    
    
        public static void collapse(final View view) {
            int finalHeight = view.getHeight();
    
            ValueAnimator mAnimator = slideAnimator(view, finalHeight, 0);
    
            mAnimator.addListener(new Animator.AnimatorListener() {
    
                @Override
                public void onAnimationEnd(Animator animator) {
                    view.setVisibility(View.GONE);
                }
    
    
                @Override
                public void onAnimationStart(Animator animation) {
    
                }
    
    
                @Override
                public void onAnimationCancel(Animator animation) {
    
                }
    
    
                @Override
                public void onAnimationRepeat(Animator animation) {
    
                }
            });
            mAnimator.start();
        }
    
    
        private static ValueAnimator slideAnimator(final View v, int start, int end) {
    
            ValueAnimator animator = ValueAnimator.ofInt(start, end);
    
            animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    
                @Override
                public void onAnimationUpdate(ValueAnimator valueAnimator) {
    
                    int value = (Integer) valueAnimator.getAnimatedValue();
                    ViewGroup.LayoutParams layoutParams = v.getLayoutParams();
                    layoutParams.height = value;
                    v.setLayoutParams(layoutParams);
                }
            });
            return animator;
        }
    }
    

提交回复
热议问题