Un approccio alternativo che ho utilizzato per aggiungere più proprietà all'animazione di un oggetto consiste nell'utilizzare un mix di codice e XML per definire l'animazione. Questo si basa su questa documentation
Ad esempio, in XML posso AnimatorSets installazione e ObjectAnimators per un singolo oggetto con valori statici, e definire una sequenza sequenziale di modifiche (res/animatore/moveout.xml)
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="sequentially">
<set>
<objectAnimator
android:propertyName="scaleX"
android:duration="2000"
android:valueTo="0.8"
android:interpolator="@android:anim/decelerate_interpolator"/>
<objectAnimator
android:propertyName="scaleY"
android:duration="2000"
android:valueTo="0.8"
android:interpolator="@android:anim/decelerate_interpolator"/>
<objectAnimator
android:propertyName="alpha"
android:duration="2000"
android:valueTo="0"
android:interpolator="@android:anim/decelerate_interpolator"/>
</set>
<set>
<objectAnimator
android:propertyName="scaleX"
android:duration="2000"
android:valueTo="1.2"
android:interpolator="@android:anim/accelerate_interpolator"/>
<objectAnimator
android:propertyName="scaleY"
android:duration="2000"
android:valueTo="1.2"
android:interpolator="@android:anim/accelerate_interpolator"/>
<objectAnimator
android:propertyName="alpha"
android:duration="2000"
android:valueTo="1"
android:interpolator="@android:anim/accelerate_interpolator"/>
</set>
</set>
allora posso caricare questi AnimatorSets/ObjectAnimators in fase di esecuzione e modificare i loro valori con i valori generati in modo dinamico:
AnimatorSet firstSet = (AnimatorSet) AnimatorInflater.loadAnimator(this,
R.animator.moveout);
AnimatorSet secondSet = firstSet.clone();
firstSet.setTarget(button);
secondSet.setTarget(anotherButton);
// Choreograph the animations
// Change the duration of all child elements in the set
firstSet.setDuration(1000);
secondSet.setDuration(200);
// Set start delay so second set plays after the first set
secondSet.setStartDelay(2000);
AnimatorSet anim = new AnimatorSet();
anim.playTogether(firstSet,secondSet);
anim.start();
invece di TRANSLATION_X/TRANSLATION_Y provare la vostra proprietà, che sia "myProperty" e vedere cosa succede – pskink
I non posso farlo TRANSLATION_Y è solo una costante. In realtà è "translationY" che è la proprietà usata per tradurre lungo l'asse Y. Non riesco a crearne uno, almeno non credo di poterlo fare! –
ok prova qualcosa del tipo: ObjectAnimator.ofFloat (questo, "miaProprietà", valore) – pskink