2014-12-03 107 views
3

对于动画我必须听ViewPropertyAnimator的每一步。我使用AnimatorUpdateListener结合setUpdateListener
源:http://developer.android.com/reference/android/view/ViewPropertyAnimator.html在api级别使用setUpdateListener低于19


实施例如何使用它:

image.animate().translationY(transY).setDuration(duration).setUpdateListener(new AnimatorUpdateListener() { 

     @Override 
     public void onAnimationUpdate(ValueAnimator animation) { 
      // do my things 
     } 
}); 

查阅即时从A移动一个目的是B和必须detect一些事情而移动。现在setUpdateListener对此非常有帮助,而且这个代码一切正常。但它需要api级别19.我真的想为这个项目使用api level 14。 setUpdateListener有没有其他选择?

ViewPropertyAnimator.setUpdateListener

Call requires api level 19 (current min is 14) 
+1

你可以使用一个valueanimator?它看起来像它的addUpdateListener只需要api 11. – Whitney 2014-12-03 15:58:46

回答

3

随着API级别19或以上,你可以说

image.animate() 
    .translationY(transY) 
    .setDuration(duration) 
    .setUpdateListener(new AnimatorUpdateListener() { 

     @Override 
     public void onAnimationUpdate(ValueAnimator animation) { 
      // do my things 
     } 

    }); 

随着API级别11或以上,你可以求助于:

ObjectAnimator oa = ObjectAnimator.ofFloat(image, View.TRANSLATION_Y, transY) 
            .setDuration(duration); 
oa.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
    @Override 
    public void onAnimationUpdate(ValueAnimator animation) { 
     // do my things 
    } 
}); 
oa.start(); 

注意:虽然ViewProperyAnimator调用View.setHasTransientState()下的动画视图,ObjectAnimator没有。这会在执行自定义操作时导致不同的行为(即不会与ItemAnimatorRecyclerView项目动画。

0

尝试使用9OldAndroid lib中。它回迁蜂巢(Android 3.0的)动画API的平台的所有版本回1.0!

Rference链接 https://github.com/JakeWharton/NineOldAndroids/

+1

问题是,api 19包含api低于19的方法('setUpdateListener')。所以不推荐使用/ api级别19上丢失的旧方法不是问题。它的另一种方式。我在库中搜索,但无法找到setUpdateListener的替代方法。 – 2014-12-03 12:27:42

3

下面是索尔特的回答在一处监听器代码和API的版本代码级检查的改进:

ValueAnimator.AnimatorUpdateListener updateListener = new ValueAnimator.AnimatorUpdateListener() { 
    @Override 
    public void onAnimationUpdate(ValueAnimator animation) { 
     // do my things 
    }  
}; 

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
    image.animate() 
      .translationY(transY) 
      .setDuration(duration) 
      .setUpdateListener(updateListener); 
} else { 

    ObjectAnimator oa = ObjectAnimator.ofFloat(image, View.TRANSLATION_Y, transY) 
            .setDuration(duration); 
    oa.addUpdateListener(updateListener); 
    oa.start(); 
} 
相关问题