使用 ObjectAnimator 淡出并翻译 VectorDrawable
Fade out and translate VectorDrawable with ObjectAnimator
我正在尝试让 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"/>
然后用 ObjectAnimation
定位 VectorDrawable
:
<target
android:name="disgust"
android:animation="@anim/fadetransout" />
VectorDrawable
是 VectorDrawable
资源文件中的 <group>
。
但是当我启动动画时什么也没有发生。我做错了什么?
我在堆栈跟踪中发现了这个:
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>
的 "parent"。我真正想要的是改变 <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
。
我正在尝试让 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"/>
然后用 ObjectAnimation
定位 VectorDrawable
:
<target
android:name="disgust"
android:animation="@anim/fadetransout" />
VectorDrawable
是 VectorDrawable
资源文件中的 <group>
。
但是当我启动动画时什么也没有发生。我做错了什么?
我在堆栈跟踪中发现了这个:
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>
的 "parent"。我真正想要的是改变 <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
。