2015-11-16 5 views
7

In base a the Android developer site, è possibile caricare la classe AnimatorSet in modo programmatico dal file xml situato nel percorso in questo modo: res/animator/filename.xml. Così ho creato un progetto di esempio e ho cercato di vedere se effettivamente funziona, e non lo fa; non accade nulla. Sarebbe molto bello se riesco a capire cosa manca e/o cosa ho sbagliato. Grazie in anticipo! Qui di seguito è il mio file xml animatore e il codice Java per caricare il xml:Come caricare il file animatore xml su Android programmaticamente?

res/animatore/sample.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="x" 
     android:duration="500" 
     android:valueTo="400" 
     android:valueType="intType" 
     /> 
    <objectAnimator 
     android:propertyName="y" 
     android:duration="500" 
     android:valueTo="300" 
     android:valueType="intType" 
     /> 
    </set> 
    <objectAnimator 
     android:propertyName="alpha" 
     android:duration="500" 
     android:valueTo="1f" 
     /> 
</set> 

Ed ecco il mio codice Java per caricare il file XML di cui sopra:

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
fab.setOnClickListener(new View.OnClickListener() { 
    @Override public void onClick(View view) { 
    // Load and start Animaton 
    AnimatorSet animSet = 
     (AnimatorSet) AnimatorInflater.loadAnimator(view.getContext(), R.animator.sample); 
    animSet.setTarget(view); 
    animSet.start(); 
    } 
}); 

risposta

20

Il set contiene un altro Set res/animator/sample.xml. Semplificarlo

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:ordering="sequentially" 
    > 

    <objectAnimator 
     android:propertyName="alpha" 
     android:duration="500" 
     android:valueTo="1f" 
     /> 
</set> 

È gonfiare l'AnimatorSet come questo

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(getActivity(), R.animator.sample); 
set.setTarget(fab); // set the view you want to animate 
set.start(); 

Finora, non ho trovato un modo per gonfiare objectAnimator da XML a Java. Devo avvolgerlo all'interno di un Set

+1

Non funziona, neanche. :( – DysaniazzZ

+0

@DysaniazzZ puoi essere più esplicito? –

0

Questo è un errore nell'esempio fornito nella documentazione.

Provare a cambiare android:valueType="intType" a android:valueType="floatType".

Funziona in caso di @RaymondChenon come lui non è esplicitamente cambiando il android:valueType al int così il sistema sta prendendo quello di default float

Il problema qui è che si stanno dando android:valueType="intType" nella vostra animatore che dovrebbe essere android:valueType="floatType" per la proprietà android:propertyName="x" che stai animando.

Al sistema di runtime cercare setter per la proprietà che si desidera animare. Come nel tuo caso cercherà setX(), ma siccome stai definendo il tipo di argomento di tipo int causa una mancata corrispondenza poiché non esiste un tale metodo, non so perché non si verifichi un arresto anomalo.

Guardate le proprietà di View classe c'è un metodo setX(float)

Per una maggiore comprensione, è possibile fare riferimento StackOverflow Question