Android AnimatorSet的坑
在使用AnimatorSet设置组合动画时,会真正的去改变控件属性值,如果存在在动画执行后隐藏自身,在下次显示的时候,会显示不出来,原因就是因为你的动画执行完成时已经对控件属性产生了效果,所以我们需要判断一下,在下次显示的时候执行AnimatorSet.setupStartValues(); 设置为动画开始的参数值,即可再次显示
ViewGroup的子控件动画
在构造函数中执行该函数
public void setLayoutAnimation() {
LayoutTransition mLayoutTransition = new LayoutTransition();
//设置每个动画持续的时间
mLayoutTransition.setStagger(LayoutTransition.CHANGE_APPEARING, 300);
mLayoutTransition.setStagger(LayoutTransition.CHANGE_DISAPPEARING, 300);
mLayoutTransition.setStagger(LayoutTransition.APPEARING, 300);
mLayoutTransition.setStagger(LayoutTransition.DISAPPEARING, 300);
//A:@tuliyuan 添加新的子控件时,子控件展示的动画--start
PropertyValuesHolder appearingScaleX = PropertyValuesHolder.ofFloat("scaleX", 0.5f, 1.0f);
PropertyValuesHolder appearingScaleY = PropertyValuesHolder.ofFloat("scaleY", 0.5f, 1.0f);
PropertyValuesHolder appearingAlpha = PropertyValuesHolder.ofFloat("alpha", 0f, 1f);
ObjectAnimator mAnimatorAppearing = ObjectAnimator.ofPropertyValuesHolder(this, appearingAlpha, appearingScaleX, appearingScaleY);
mLayoutTransition.setAnimator(LayoutTransition.APPEARING, mAnimatorAppearing);
//A:@tuliyuan 添加新的子控件时,子控件展示的动画--end
//A:@tuliyuan 移除新的子控件时,子控件展示的动画--start
PropertyValuesHolder disappearingAlpha = PropertyValuesHolder.ofFloat("alpha", 1f, 0f);
PropertyValuesHolder disappearingRotationY = PropertyValuesHolder.ofFloat("rotationY", 0.0f, 90.0f);
ObjectAnimator mAnimatorDisappearing = ObjectAnimator.ofPropertyValuesHolder(this, disappearingAlpha, disappearingRotationY);
mLayoutTransition.setAnimator(LayoutTransition.DISAPPEARING, mAnimatorDisappearing);
//A:@tuliyuan 移除新的子控件时,子控件展示的动画--start
//A:@tuliyuan 移除新的子控件时,其他子控件展示的动画--start
// 子控件的平移动画
PropertyValuesHolder pvhSlide = PropertyValuesHolder.ofFloat("y", 0, 1);
PropertyValuesHolder pvhXSlide = PropertyValuesHolder.ofFloat("x", 0, 1);
Animator changingDisappearAnim = ObjectAnimator.ofPropertyValuesHolder(
this, pvhSlide, pvhXSlide);
changingDisappearAnim.setDuration(mLayoutTransition.getDuration(LayoutTransition.CHANGE_DISAPPEARING));
mLayoutTransition.setAnimator(LayoutTransition.CHANGE_DISAPPEARING,
changingDisappearAnim);
//A:@tuliyuan 移除新的子控件时,其他子控件展示的动画--start
//A:@tuliyuan 添加新的子控件时,其他子控件展示的动画--start
ObjectAnimator mAnimatorChangeAppearing = ObjectAnimator.ofPropertyValuesHolder(this, pvhSlide, pvhXSlide);
mAnimatorChangeAppearing.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
Log.d(TAG, "onAnimationStart: start mAnimatorChangeAppearing ");
}
@Override
public void onAnimationEnd(Animator animation) {
Log.d(TAG, "onAnimationStart: start mAnimatorChangeAppearing ");
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
mLayoutTransition.setAnimator(LayoutTransition.CHANGE_APPEARING, mAnimatorChangeAppearing);
setLayoutTransition(mLayoutTransition);
//A:@tuliyuan 添加新的子控件时,其他子控件展示的动画--start
}