在api级别低于19的情况下使用setUpdateListener

时间:2014-12-03 12:12:13

标签: android animation

对于动画,我必须聆听 ViewPropertyAnimator 的每一步。我将AnimatorUpdateListenersetUpdateListener结合使用。 来源:http://developer.android.com/reference/android/view/ViewPropertyAnimator.html


我如何使用它的示例:

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)

3 个答案:

答案 0 :(得分:7)

以下是Zsolt在一个地方使用侦听器代码和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();
}

答案 1 :(得分:6)

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项目动画时,这可能会导致不同的行为。

答案 2 :(得分:0)

尝试使用9OldAndroid lib ..它将所有版本平台上的Honeycomb(Android 3.0)动画API反向移植回1.0!

参考链接 https://github.com/JakeWharton/NineOldAndroids/