我试图让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"/>
然后使用
VectorDrawable
定位ObjectAnimation
:<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
淡出并翻译吗?谢谢。
最佳答案
我发现我做错了什么。我再次查看了this并意识到了问题所在。我没有说,也没想到的是,disgust
可绘制对象是<group>
,而<group>
确实具有x平移属性,但它称为translateX
,所以这是我得到的第一件事错误。
第二件事是属性alpha
用于整个<vector>
,这是<group>
的“父级”。我真正想要的是更改<path>
的alpha的东西。这是通过使用属性fillAlpha
完成的。 fillAlpha
是从0
到1
的浮点数。 0
是透明的,而1
是不透明的。 0
至255
表示持续时间内淡入255次。
最后,这两个objectAnimator
不能在同一个XML文件中在一起,因为一个用于<group>
,一个用于<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
。