2015-10-01 33 views
5

我試圖在XML中定義的動畫中使用propertyValuesHolderobjectAnimator。當我加載運行時引發異常,原因Unknown animator name: propertyValuesHolderPropertyValuesHolder在使用XML定義的動畫時導致崩潰

這是直接從ObjectAnimator文檔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> 

我用下面的代碼加載和啓動動畫:

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

原因我從堆棧跟蹤得到的是:

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) 

這適用於我使用不包含propertyValuesHolder的動畫。在XML中使用該標籤時,我找不到任何示例。我做錯了什麼,或者它不工作?

+0

@Shadow Droid你的鏈接404s。根據什麼「相應地更改代碼」? ValueAnimator頁面上的第二個例子有一個XML定義的'propertyValuesHolder',它將導致同樣的崩潰 – Harkin

+0

對不起,以前的評論中沒有正確地放置鏈接.. http://developer.android.com/reference/android/animation/ValueAnimator .html我不會爲了什麼目的使用PropertyValuesHolder ...但它的實際用途是避免使用AnimatorSet並使代碼可讀...請檢查此鏈接http://android-developers.blogspot.in/2011/05/introducing -viewpropertyanimator.html –

+0

我明白它的目的,並且我正在使用它(在上面的示例中,在1秒的時間內爲對象的x和y屬性設置動畫效果)。我試圖在XML中定義的動畫中執行此操作,而不是以編程方式定義的動畫。這應該是可能的,因爲在文檔中有這樣的例子(我鏈接到的那個和你鏈接的),但是當我嘗試從XML文件加載它時引發異常 – Harkin

回答

2

我相信原因是propertyValuesHolder在Lollipop之前不支持XML元素。

如果你看看AnimatorInflater,你會看到第一次引用PropertyValuesHolder類的時候是5.0。