我有一个带有透明中心的粗圆:
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid
android:color="@android:color/transparent"/>
<stroke
android:width="24dp"
android:color="@android:color/white"/>
<size
android:width="72dp"
android:height="72dp"/>
</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只能操作单个参数属性.
解决方法:
您可以使用对象动画制作器设置动画的唯一属性列在here.这可以通过多种方式完成,其中一个最简单的方法如下:
以编程方式创建Shape并使用ValueAnimator设置值.您创建一个floatAn的ValueAnimator并添加一个UpdateListener,因此在每个tick中,您可以编辑您的笔触大小.我会给你一个例子:
例:
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,祝您好运.