2015-10-14 20 views
0

我有一个搜索栏,当在工具栏中单击图标时展开。现在,当它展开时,一切都很酷,一切正常,不好的是当搜索栏被折叠时,高度不是很好。折叠搜索栏时的工具栏比它具有更高的高度。这里是代码:ValueAnimator /展开/折叠视图没有给出正确的高度

private void expand(View view) { 
    //set Visible 
    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(0, view.getMeasuredHeight(), view); 
    mAnimator.start(); 
} 

private ValueAnimator slideAnimator(int start, int end, final View view) { 

    ValueAnimator animator = ValueAnimator.ofInt(start, end); 
    animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
     @Override 
     public void onAnimationUpdate(ValueAnimator valueAnimator) { 
      //Update Height 
      int value = (Integer) valueAnimator.getAnimatedValue(); 
      ViewGroup.LayoutParams layoutParams = view.getLayoutParams(); 
      layoutParams.height = value; 
      view.setLayoutParams(layoutParams); 
     } 
    }); 
    return animator; 
} 


private void collapse(final View view) { 
    int finalHeight = view.getHeight(); 

    ValueAnimator mAnimator = slideAnimator(finalHeight, 0, view); 

    mAnimator.addListener(new Animator.AnimatorListener() { 
     @Override 
     public void onAnimationStart(Animator animation) { 

     } 

     @Override 
     public void onAnimationEnd(Animator animator) { 
      //Height=0, but it set visibility to GONE 
      view.setVisibility(View.INVISIBLE); 
     } 

     @Override 
     public void onAnimationCancel(Animator animation) { 

     } 

     @Override 
     public void onAnimationRepeat(Animator animation) { 

     } 
    }); 
    mAnimator.start(); 
} 

回答

0

这里的一切都很好,如果你改变背景或工具栏的任何其他属性,请检查你调用方法的位置。