0

Ich versuche, eine einfache Wiedergabe zu erstellen, um Animation beim Klicken mit AnimatedVectorDrawable anzuhalten und umzukehren. Irgendwie startet die Animation nicht.AnimatedVectorDrawable Animation startet nicht

Mein Code ist wie folgt:

MainActivity.java

public class MainActivity extends AppCompatActivity { 

private static final String TAG = "MainActivity"; 

private ImageView playPauseImgVw; 
private AnimatedVectorDrawable playToPauseAvDrwble; 
private AnimatedVectorDrawable pauseToPlayAvDrwble; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    playPauseImgVw = (ImageView) findViewById(R.id.activity_main_play_pause_btn_imgVw_id); 
    playToPauseAvDrwble = (AnimatedVectorDrawable) getDrawable(R.drawable.animated_vector_play_to_pause); 
    pauseToPlayAvDrwble = (AnimatedVectorDrawable) getDrawable(R.drawable.animated_vector_pause_to_play); 

    playPauseImgVw.setImageDrawable(playToPauseAvDrwble); 
    playPauseImgVw.setOnClickListener(newOnClickListener()); 
} 

private View.OnClickListener newOnClickListener() { 
    return new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      morph(); 
     } 
    }; 
} 

public void morph() { 

    Log.d(TAG, "start animation"); 
    playToPauseAvDrwble.start(); 
} 
} 

transition_pause_to_play.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
<objectAnimator android:duration="1000" 
    android:propertyName="pathData" 
    android:valueFrom="@string/path_pause_button" 
    android:valueTo="@string/path_play_button" 
    android:valueType="pathType" 
    android:interpolator="@android:interpolator/fast_out_slow_in" /> 

</set> 

transition_play_to_pause.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
<objectAnimator android:duration="1000" 
    android:propertyName="pathData" 
    android:valueFrom="@string/path_play_button" 
    android:valueTo="@string/path_pause_button" 
    android:valueType="pathType" 
    android:interpolator="@android:interpolator/fast_out_slow_in" /> 

</set> 

animated_vector_pause_to_play.xml

<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" 
android:drawable="@drawable/vector_pause_button"> 
<target 
    android:animation="@animator/transition_pause_to_play" 
    android:name="path_pause_button" /> 
</animated-vector> 

animated_vector_play_to_pause.xml

<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" 
android:drawable="@drawable/vector_play_button"> 
<target 
    android:animation="@animator/transition_play_to_pause" 
    android:name="path_play_button" /> 

vector_pause_button.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android" 
android:width="128dp" 
android:height="128dp" 
android:viewportHeight="600" 
android:viewportWidth="600"> 

<path 
    android:name="path_name_pause_button" 
    android:fillAlpha="1" 
    android:fillColor="@color/color_pause_button" 
    android:pathData="@string/path_pause_button" 
    android:strokeColor="@color/color_stroke_pause_button" /> 

vector_play_button.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android" 
android:width="128dp" 
android:height="128dp" 
android:viewportHeight="600" 
android:viewportWidth="600"> 

<path 
    android:name="path_name_play_button" 
    android:fillAlpha="1" 
    android:fillColor="@color/color_play_button" 
    android:pathData="@string/path_play_button" 
    android:strokeColor="@color/color_stroke_play_button" /> 

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="com.merryapps.vectoranimationpoc.MainActivity"> 

<ImageView 
    android:id="@+id/activity_main_play_pause_btn_imgVw_id" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:clickable="true" 
    android:scaleType="fitCenter" 
    android:layout_centerHorizontal="true"/> 

strings.xml

<resources> 
<string name="app_name">VectorAnimationPoc</string> 
<string name="path_play_button">M300,70 l 0,-70 95,70 0,0 M300,70 l 95,0 -95,70 0,0 z</string> 
<string name="path_pause_button">M365,140 l 30,0 0,-140, -30,0 M300,140 l 30,0 0,-140 -30,0 z</string> 
</resources> 

bin ich etwas fehlt hier?

Antwort

2

Von dem Code, den Sie gepostet haben, scheint es, dass es größtenteils korrekt ist, außer für ein paar wichtige Tippfehler!

Ihre AnimatedVectorDrawable <target> Tags suchen Ziele genannt „path_play_button“ und „path_pause_button“ aber in Ihrem VectorDrawables die Wege sind eigentlich „path_name_play_button“ und „path_name_pause Button“ genannt.

Sie haben die tatsächlichen pathData nicht gepostet, aber unter der Annahme, dass die Pfade kompatibel sind, denke ich, dass das Korrigieren der Übereinstimmung dieser Namen das Problem beheben sollte.

+1

Vielen Dank. Es funktioniert jetzt. Ich habe auch die Frage mit den Pfaden aktualisiert. Übrigens, ich lerne von diesem tollen [post] (https://lewismcgeary.github.io/posts/animated-vector-drawable-pathMorphing/) von dir. :) –

+0

, ausgezeichnet! –