shap圆角动画

如何对一个背景做动画,圆角变直角,直角变圆角?
可以通过对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变化和圆角变直角的动画集合。

你可能感兴趣的:(shap圆角动画)