首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动画ObjectAnimator/ObjectAnimator bug?

动画ObjectAnimator/ObjectAnimator bug?
EN

Stack Overflow用户
提问于 2016-12-28 08:56:12
回答 3查看 1.8K关注 0票数 3

我想要一个动画VectorDrawable。

下面是我的VectorDrawable (从SVG转换而来,在本例中简化):

代码语言:javascript
复制
<?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:

代码语言:javascript
复制
<?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>

我的动画:

代码语言:javascript
复制
<?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上播放,也不在6.0上播放。

我做错了什么吗?

谢谢你的帮忙!

Ps:我的最后一个向量包含更多的元素,我的动画包含更多的步骤(右转,延迟后左转,然后是…)。但是这个简化的版本足以显示我所面临的错误。

EN

回答 3

Stack Overflow用户

发布于 2016-12-29 16:06:59

我发现startOffset在AnimatedVectorDrawables中通常是有问题的,所以我避免使用它。

另一种方法是包含一个所需长度的ObjectAnimator,将属性保持在下一个起始值。在这种情况下:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:ordering="sequentially">
    <objectAnimator
        android:duration="1000"
        android:propertyName="rotation"
        android:valueFrom="0"
        android:valueTo="0"
        android:valueType="floatType"/>
    <objectAnimator
        android:duration="1000"
        android:propertyName="rotation"
        android:valueFrom="0"
        android:valueTo="180"
        android:valueType="floatType"/>
</set>
票数 1
EN

Stack Overflow用户

发布于 2019-03-29 07:41:19

我也遇到了这个令人难以置信的令人沮丧的错误。它被报告给了谷歌的问题追踪器将于2016年12月上市,但我怀疑他们是否会有时间来修复它。

我使用的解决方法类似于刘易斯McGeary给出的答案,但正如注释中指出的那样,如果您希望同时动画多个属性(例如,scaleX和scaleY),这将无法工作。

但是,您可以做的是将要在另一个<set>中动画化的动画包装在一起,如下所示:

代码语言:javascript
复制
<?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>
票数 1
EN

Stack Overflow用户

发布于 2017-10-07 10:10:42

在我的例子中,这个错误是我第二次请求动画时才会面对的。我每次都在重新初始化动画,对我来说,这个问题仅仅是第一次简单的初始化就解决了。因此,这个代码:

代码语言:javascript
复制
playAnimation = (AnimatedVectorDrawable) getDrawable(R.drawable.play_anim);
m_imageview_animable.setImageDrawable(playAnimation);
playAnimation.start();`

变成:

代码语言:javascript
复制
if (playAnimation == null){
     playAnimation = (AnimatedVectorDrawable) getDrawable(R.drawable.play_anim);
     m_imageview_animable.setImageDrawable(playAnimation);
     playAnimation.start();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41358517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档