2015-10-14 1 views
0

J'ai une barre de recherche qui se développe lorsque l'icône est cliquée dans la barre d'outils. Maintenant, tout est cool quand il est étendu, tout fonctionne bien, la chose qui n'est pas bonne est que la hauteur n'est pas bonne quand la barre de recherche est réduite. La barre d'outils lors de l'effondrement de la barre de recherche a une hauteur plus grande que ce qu'elle avait. Voici le code:Affichage ValueAnimator/Expand/Collapse ne donnant pas la bonne hauteur

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(); 
} 

Répondre

0

Tout est bon ici, vérifiez où vous appelez la méthode si vous changez l'arrière-plan ou toute autre propriété de la barre d'outils.