我想动画一个VectorDrawable。
这是我的VectorDrawable(从SVG转换而来,本例简化):
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="888dp"
android:height="600dp"
android:viewportHeight="600"
android:viewportWidth="888">
<group
android:name="wheel"
android:pivotX="498.0"
android:pivotY="385.0"
android:rotation="0.0">
<path
android:fillColor="#BDEDFF"
android:pathData="M547.4,363.9l-23.7,6.7c-1.1-1.8-2.5-3.5-4-5l12-21.5c2.2-3.9,0.8-8.9-3.1-11.1c-3.9-2.2-8.9-0.8-11.1,3.1
l-12,21.5c-2-0.5-4.2-0.7-6.4-0.8l-6.7-23.7c-1.2-4.3-5.7-6.8-10-5.6c-4.3,1.2-6.8,5.7-5.6,10l6.7,23.7c-1.8,1.1-3.5,2.5-5,4
l-21.5-12c-3.9-2.2-8.9-0.8-11.1,3.1c-2.2,3.9-0.8,8.9,3.1,11.1l21.5,12c-0.5,2-0.7,4.2-0.8,6.4l-23.7,6.7c-4.3,1.2-6.8,5.7-5.6,10
c1,3.6,4.3,5.9,7.8,5.9c0.7,0,1.5-0.1,2.2-0.3l23.7-6.7c1.1,1.8,2.5,3.5,4,5l-12,21.5c-2.2,3.9-0.8,8.9,3.1,11.1c1.3,0.7,2.6,1,4,1
c2.9,0,5.6-1.5,7.1-4.2l12-21.5c2,0.5,4.2,0.7,6.4,0.8l6.7,23.7c1,3.6,4.3,5.9,7.8,5.9c0.7,0,1.5-0.1,2.2-0.3
c4.3-1.2,6.8-5.7,5.6-10l-6.7-23.7c1.8-1.1,3.5-2.5,5-4l21.5,12c1.3,0.7,2.6,1,4,1c2.8,0,5.6-1.5,7.1-4.2c2.2-3.9,0.8-8.9-3.1-11.1
l-21.5-12c0.5-2,0.7-4.2,0.8-6.4l23.7-6.7c4.3-1.2,6.8-5.7,5.6-10C556.2,365.1,551.7,362.6,547.4,363.9z"/>
</group>
</vector>
我的AnimatedVectorDrawable:
<?xml version="1.0" encoding="utf-8"?>
<animated-vector
xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/image_vect">
<target
android:name="wheel"
android:animation="@anim/wheel"/>
</animated-vector>
我的动画:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:duration="1000"
android:propertyName="rotation"
android:startOffset="1000"
android:valueFrom="0"
android:valueTo="180"
android:valueType="floatType"/>
</set>
我的问题在于startOffset:
如果android:startOffset
为100,则动画正在4.4和6.0上播放。完美。
如果android:startOffset
为300,则动画不会在4.4上播放,而是在6.0上播放
如果android:startOffset
为500,则动画不会在4.4上播放
我做错了吗?
感谢您的帮助!
Ps:我的最终矢量包含更多元素,我的动画包含更多步骤(向右转,然后在延迟后向左转,然后......)。但是这个简化版本足以显示我所面临的错误。
答案 0 :(得分:1)
我发现$('#drugTable').append(start).append(td_DrugsCurrentlyUsed).append(td_SourceOfDrugs).append(td_FrequencyOfUse).append(td_ModeOfDrugUse);
通常会出现AnimatedVectorDrawables问题,足以让我避免使用它。
另一种方法是包含所需长度的startOffset
,使属性保持在下一个起始值。在这种情况下:
ObjectAnimator
答案 1 :(得分:0)
在我的情况下,错误只是我第二次要求动画。我每次都重新初始化动画,对我来说问题已经解决,只是第一次初始化。 所以,这段代码:
imageArray
成了:
playAnimation = (AnimatedVectorDrawable) getDrawable(R.drawable.play_anim);
m_imageview_animable.setImageDrawable(playAnimation);
playAnimation.start();`
答案 2 :(得分:0)
我也遇到了这个令人沮丧的错误。 It was reported to Google's issue tracker于2016年12月发布,但我怀疑他们能否解决这个问题。
我使用的解决方法与Lewis McGeary给出的答案类似,但是正如注释中所指出的,如果要同时为多个属性(例如scaleX和scaleY)设置动画,这将不起作用。 / p>
但是,您可以做的是将要设置动画的动画包装到另一个<set>
中,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="sequentially">
<!-- Dummy animation to replace startOffset -->
<objectAnimator android:duration="250" />
<set android:ordering="together">
<objectAnimator
android:duration="450"
android:interpolator="@android:anim/overshoot_interpolator"
android:propertyName="scaleX"
android:valueFrom="0"
android:valueTo="0.8"
android:valueType="floatType" />
<objectAnimator
android:duration="450"
android:interpolator="@android:anim/overshoot_interpolator"
android:propertyName="scaleY"
android:valueFrom="0"
android:valueTo="0.8"
android:valueType="floatType" />
</set>
</set>