以下内容,仅仅是学习笔记。
ValueAnimator类
ObjectAnimator类
AnimatorSet类
官方文档介绍:
具体代码:
private void expand() {
final LayoutParams params = mContentLayout.getLayoutParams();
int targetHeight;
int height = mContentLayout.getMeasuredHeight();
boolean flag = (Boolean) mArrow.getTag();
if (flag) {
mArrow.setTag(false);
targetHeight = 0;
} else {
mArrow.setTag(true);
targetHeight = measureContentHeight();
}
mSafeLayout.setEnabled(false);
ValueAnimator va = ValueAnimator.ofInt(height, targetHeight);
va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator va) {
params.height = (Integer) va.getAnimatedValue();
mContentLayout.setLayoutParams(params);
}
});
va.addListener(new AnimatorListener() {
@Override
public void onAnimationStart(Animator arg0) {
}
@Override
public void onAnimationRepeat(Animator arg0) {
}
@Override
public void onAnimationEnd(Animator arg0) {
boolean flag = (Boolean) mArrow.getTag();
mArrow.setImageResource(flag ? R.drawable.arrow_up : R.drawable.arrow_down);
mSafeLayout.setEnabled(true);
}
@Override
public void onAnimationCancel(Animator arg0) {
}
});
va.setDuration(300);
va.start();
}
下篇文章详细介绍一下属性动画。