Toolbar逐渐缩小的动画

/** * getViewTreeObserver方法是view对象发生改变时的观察者对象 * 我们无法在一个view 在onCreate时拿到它的宽高,这是因为View组件布局要在onResume回调后完成 * 但是我们可以通过监听它的改变,从而拿到一个view的宽高 * addOnPreDrawListener: * 当一个视图树将要绘制时,所要调用的回调函数的接口类 */
mToolbar.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {    
@Override    
public boolean onPreDraw() {
   mToolbar.getViewTreeObserver().removeOnPreDrawListener(this);       
   final int widthSpec=View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);   
   final int heightSpec=View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); 
   mToolbar.measure(widthSpec, heightSpec);    
   mToolbarHeight = mToolbar.getHeight();       
 /*** 执行
      Toolbar动画
  **/      
   collapseToolbar();       

   return true;    }
});

collaspseToolbar

public void collapseToolbar() {  
  int targetHeight = 0;   
 TypedValue value = new TypedValue();   
 if (getActivity().getTheme().resolveAttribute(android.R.attr.actionBarSize,value,true)){    
//目标高度是系统默认的toolbar高      
  targetHeight=TypedValue.complexToDimensionPixelSize(value.data, getResources().getDisplayMetrics());  }    
//从当前toolbar的高到目标toolbar的高之间计算动画值    
ValueAnimator valueAnimator=ValueAnimator.ofInt(mToolbarHeight, DeviceUtils.dip2px(getActivity(),120));    
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {   
@Override       
 public void onAnimationUpdate(ValueAnimator animation) {          
  //拿到Toolbar的布局参数          
  ViewGroup.LayoutParams lp = mToolbar.getLayoutParams(); 
  lp.height =(Integer) animation.getAnimatedValue();
//将每次产生的值 作为参数赋给toolbar,让toolbar不断改变高度  
   Log.d("TAG","animator size : "+animation.getAnimatedValue()); 
   mToolbar.setLayoutParams(lp);          
   mToolbar.invalidate();       
 }  
});    
valueAnimator.setDuration(2000);    
valueAnimator.start();    
valueAnimator.addListener(new AnimatorListenerAdapter() {      
  @Override       
 public void onAnimationEnd(Animator animation) {      
      super.onAnimationEnd(animation);            
//当toolbar动画完成时加载数据            
   mPresenter.loadWeatherData(mRecycle); 
   YoYo.with(Techniques.ZoomIn).delay(600).duration(400).playOn(mFab);    
      /*  // Animate fab           
   ViewCompat.animate(mFab).setStartDelay(600).setDuration(400).scaleY(1).scaleX(1).start();*/        } 
   });
}

你可能感兴趣的:(Toolbar逐渐缩小的动画)