2

我试图让 AnimatedVectorDrawable 同时淡出和翻译。我做了一个ObjectAnimator资源:

<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
    android:propertyName="translationX"
    android:duration="@+string/animtime"
    android:valueFrom="0"
    android:valueTo="150"
    android:valueType="floatType"/>
<objectAnimator
    android:propertyName="alpha"
    android:duration="@+string/animtime"
    android:valueFrom="255"
    android:valueTo="0"
    android:valueType="intType"/>

然后针对a VectorDrawableObjectAnimation

<target
    android:name="disgust"
    android:animation="@anim/fadetransout" />

VectorDrawable是资源文件中的<group>一个。VectorDrawable

但是当我开始动画时,什么都没有发生。我究竟做错了什么?

我在堆栈跟踪中找到了这个:

Method setTranslationX() with type float not found on target class class android.graphics.drawable.VectorDrawable$VGroup
Method setAlpha() with type int not found on target class class android.graphics.drawable.VectorDrawable$VGroup

它与此有关吗?

如果这是不可能的,还有其他方法可以让我VectorDrawable褪色和翻译吗?

谢谢你。

4

1 回答 1

13

我发现我做错了什么。又看了一遍,意识到问题出在哪里。我没有说,并且认为不重要的是disgust可绘制对象是 a<group>并且<group>确实具有 x 平移属性,但它被称为translateX,所以这是我弄错的第一件事。

第二件事是该属性alpha是针对整体的<vector>,它是 的“父级” <group>。我真正想要的是改变<path>. 这是通过使用属性来完成的fillAlphafillAlpha是一个从0到的浮点数10透明和1不透明。0to255表示它在持续时间内淡入 255 次。

最后,这两个objectAnimators 不能在同一个 XML 文件中,因为一个用于 a <group>,一个用于 a <path>。所以最终的结果是这样的:

在一个名为translate_out.xml我现在拥有的文件中,

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <objectAnimator
        android:propertyName="translateX"
        android:duration="@integer/animation_duration"
        android:valueFrom="0"
        android:valueTo="150" />
</set>

在另一个名为fade_out.xml我现在的文件中,

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <objectAnimator
        android:propertyName="fillAlpha"
        android:duration="@integer/animation_duration"
        android:valueFrom="1"
        android:valueTo="0" />
</set>

最后在vectordrawable.xml我有,

<target
    android:name="disgust_path"
    android:animation="@anim/fade_out" />
<target
    android:name="disgust"
    android:animation="@anim/translate_out" />

disgust_path现在我命名的路径在哪里,它总是在disgust组内。

我已将动画时间字符串移至integers.xml并调用它animation_duration

于 2016-04-11T16:53:44.867 回答