0

我想要一個AnimatedVectorDrawable淡出並同時進行翻譯。我做了一個ObjectAnimator資源:淡出並使用ObjectAnimator來翻譯VectorDrawable

<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"/> 

然後有針對性地一VectorDrawableObjectAnimation

<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褪色和翻譯?

謝謝。

回答

8

我發現我做錯了什麼。我再看看this,並意識到問題所在。我沒有說,也沒有想到的是disgust可繪製的是<group><group>確實有一個x轉換屬性,但它被稱爲translateX,所以這是我錯誤的第一件事。

第二件事是屬性alpha是整個<vector>這是<group>的「父母」。我真正想要的是改變<path>的alpha值。這是通過使用屬性fillAlpha完成的。 fillAlpha是從01的浮點數。 0是透明的,而1是不透明的。 0255表示在持續時間內消失255次。

最後,這兩個objectAnimator s不能放在同一個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

+0

很好的解釋..非常感謝。 – Sayem