0

Ich versuche, ein AnimatedVectorDrawable zum Ausblenden und zur gleichen Zeit zu übersetzen. Ich machte eine ObjectAnimator Ressource:Ausblenden und Übersetzen VectorDrawable mit 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"/> 

Dann ein VectorDrawable mit den ObjectAnimation gezielt:

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

Die VectorDrawable ist ein <group> in einer VectorDrawable Ressourcendatei.

Aber wenn ich die Animation starte, passiert nichts. Was mache ich falsch?

Ich fand dies in der Stack-Trace:

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 

Hat es etwas damit zu tun haben?

Wenn das nicht möglich ist, gibt es eine andere Möglichkeit, meine VectorDrawable zu verblassen und zu übersetzen?

Vielen Dank.

Antwort

8

Ich habe herausgefunden, was ich falsch gemacht habe. Ich warf einen zweiten Blick auf this und erkannte, was das Problem war. Was ich nicht gesagt habe und nicht gedacht habe, war, dass das disgust Zeichen ein <group> ist und <group> ein x-Übersetzungsattribut hat, aber es heißt translateX, also ist das das erste, was ich falsch verstanden habe.

Die zweite Sache ist, dass das Attribut alpha für das gesamte <vector> ist, das das "Elternteil" von <group> ist. Was ich eigentlich wollte, war etwas, um das Alpha eines <path> zu ändern. Dies geschieht mit dem Attribut fillAlpha. fillAlpha ist ein Float, der von 0 zu 1 geht. 0 ist transparent und 1 undurchsichtig. 0 bis 255 bedeutet, dass es in der Dauer 255 Mal eingeblendet wird.

Die letzten, diese beiden objectAnimator s können nicht zusammen in der gleichen XML-Datei sein, da man für eine <group> und eine für eine <path> ist. So dass das Endergebnis ist dieses:

In einer Datei namens translate_out.xml ich jetzt habe,

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

Und in einer anderen Datei namens fade_out.xml ich jetzt habe,

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

Und schließlich in vectordrawable.xml Ich habe ,

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

wo disgust_path ist jetzt ein Pfad, den ich genannt habe, der immer innerhalb der disgust Gruppe war.

Ich habe die Animationszeit Zeichenfolge auf integers.xml verschoben und nannte es animation_duration.

+0

nette erklärung .. vielen dank. – Sayem

Verwandte Themen