如何对一个背景做动画,圆角变直角,直角变圆角?
可以通过对shap的cornerRadius值做属性动画。
创建一个shap并且设置给一个view作为背景。
shape = new GradientDrawable();
shape.setColor(Color.parseColor("#ffffff"));
shape.setShape(GradientDrawable.RECTANGLE);//设置为矩形
shape.setCornerRadius(DimenUtils.dp2px(8));
mPostageCl.setBackground(shape);
开启动画:
public void showAnimation(boolean expand) {
int maxRadius = DimenUtils.dp2px(8);
int maxMargin = DimenUtils.dp2px(12);
ConstraintLayout.LayoutParams lparams = (ConstraintLayout.LayoutParams) mPostageCl.getLayoutParams();
ObjectAnimator cornerAnimator = ObjectAnimator.ofFloat(shape, "cornerRadius", maxRadius, 0);
ValueAnimator marginAnim = ValueAnimator.ofInt(maxMargin, 0);
marginAnim.addUpdateListener(animation -> {
int margin = (int) animation.getAnimatedValue();
lparams.leftMargin = margin;
lparams.rightMargin = margin;
lparams.topMargin = margin;
mPostageCl.requestLayout();
});
AnimatorSet animSet = new AnimatorSet();
animSet.setDuration(300);
animSet.playTogether(cornerAnimator, marginAnim);
animSet.start();
}
这里对view做了一个margin变化和圆角变直角的动画集合。