为 Shape 的笔画宽度设置动画

Posted

技术标签:

【中文标题】为 Shape 的笔画宽度设置动画【英文标题】:Animate the stroke width of a Shape 【发布时间】:2015-03-25 20:10:30 【问题描述】:

我有一个带有透明中心的粗圆圈:

<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid
        android:color="@android:color/transparent"/>
    <stroke
        android:
        android:color="@android:color/white"/>
    <size
        android:
        android:/>
</shape>

并希望对笔画值的减少进行动画处理,以便透明中心像虹膜一样扩张。

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <objectAnimator
        android:propertyName="????"
        android:valueFrom="24dp"
        android:valueTo="4dp"
        android:duration="750"
        />
</set>

...但我不知道要指定什么作为属性名称。 “strokeWidth”似乎不起作用。我什至不知道如何以编程方式实现它,因为 GradientDrawable.setStroke() 需要宽度和颜色,而 objectAnimator 只能操作单个参数属性。

【问题讨论】:

【参考方案1】:

您可以使用对象动画器制作动画的唯一属性在here 中列出。这可以通过许多方式完成,其中最简单的一种是:

以编程方式创建您的形状并使用ValueAnimator 设置值。您创建一个 ValueAnimator 的 float 并添加一个 UpdateListener 以便在每个刻度中,您可以编辑您的笔画大小。我给你举个例子:

例子:

final ShapeDrawable circle = new ShapeDrawable(new OvalShape());

//Create your shape programatically
ValueAnimator animation = ValueAnimator.ofFloat(24.0f,12.0f);
animation.setDuration(1000);
animation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() 
        @Override
        public void onAnimationUpdate(ValueAnimator animation) 
            circle.getPaint().setStrokeWidth((Float)animation.getAnimatedValue());
        
);

该示例将在一秒钟内将您的笔画宽度从 24 更改为 12,您可以在 ValueAnimator 和 ShapeDrawable apis 中探索更多信息,也可以查看 here,祝您好运。

【讨论】:

以上是关于为 Shape 的笔画宽度设置动画的主要内容,如果未能解决你的问题,请参考以下文章

MK 圆 - 笔画宽度相当于米

确定签名捕获笔画宽度的屏幕尺寸的最佳方法?

试图为 UITextfield 宽度约束设置动画,但它不起作用

通过更改宽度和高度为矩形设置动画

如何使用幻灯片效果(jquery)为宽度设置动画?

在 CSS3 或 jQuery 中将元素的宽度从 0% 设置为 100% 动画,它和它的包装器只需要它们需要的宽度,没有预先设置的宽度