2015-10-01 4 views
5

Sto provando a utilizzare propertyValuesHolder con uno objectAnimator in un'animazione che ho definito in XML. Quando carico un'eccezione di runtime viene lanciata con la ragione Unknown animator name: propertyValuesHolderPropertyValuesHolder provoca un arresto anomalo se utilizzato nell'animazione definita XML

Questa è l'animazione completa preso direttamente dai ObjectAnimator docs here:

<?xml version="1.0" encoding="utf-8"?> 
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" 
      android:duration="1000" 
      android:repeatCount="1" 
      android:repeatMode="reverse"> 
    <propertyValuesHolder android:propertyName="x" android:valueTo="400"/> 
    <propertyValuesHolder android:propertyName="y" android:valueTo="200"/> 
</objectAnimator> 

Sto utilizzando il seguente codice per caricare e avviare l'animazione :

Animator animator = AnimatorInflater.loadAnimator(getApplicationContext(), R.animator.example); 
animator.setTarget(view); 
animator.start(); 

la causa ricevo dal stacktrace è questo:

Caused by: java.lang.RuntimeException: Unknown animator name: propertyValuesHolder 
    at android.animation.AnimatorInflater.createAnimatorFromXml(AnimatorInflater.java:592) 
    at android.animation.AnimatorInflater.createAnimatorFromXml(AnimatorInflater.java:551) 
    at android.animation.AnimatorInflater.loadAnimator(AnimatorInflater.java:122) 
    at android.animation.AnimatorInflater.loadAnimator(AnimatorInflater.java:102) 
    at android.animation.AnimatorInflater.loadAnimator(AnimatorInflater.java:87) 

Questo funziona quando utilizzo un'animazione che non contiene uno propertyValuesHolder. Non riesco a trovare alcun esempio online in cui quel tag sia usato in XML. Sto facendo qualcosa di sbagliato o semplicemente non funziona?

+0

@Shadow Droid Il tuo link 404s. 'Cambia il codice di conseguenza' in base a cosa? Il secondo esempio sulla pagina ValueAnimator ha un 'propertyValuesHolder' definito in XML che causerà lo stesso crash – Harkin

+0

Ci scusiamo per non aver inserito correttamente il link nel commento precedente. Http://developer.android.com/reference/android/animation/ValueAnimator .html Non mi interessa per quale scopo stai usando PropertyValuesHolder ... ma è effettivamente usato per evitare AnimatorSet e rendere leggibile il codice ... controlla questo link http://android-developers.blogspot.in/2011/05/introducing -viewpropertyanimator.html –

+0

Capisco che sia uno scopo e lo sto usando per tale (nell'esempio sopra per animare le proprietà x e y di un oggetto per una durata di 1 secondo). Sto cercando di farlo in un'animazione definita in XML, non definita in modo programmatico. Questo dovrebbe essere possibile in quanto vi sono esempi di questo nei documenti (quello a cui mi collego e quello a cui ci si collega) ma viene generata un'eccezione quando provo a caricarlo dal file XML – Harkin

risposta

2

Credo che il motivo sia che propertyValuesHolder L'elemento XML non è supportato prima di Lollipop.

Se date un'occhiata a AnimatorInflater vedrete che per la prima volta viene fatto riferimento alla classe PropertyValuesHolder presente in 5.0.