Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在低于19的api级别上使用setUpdateListener_Android_Animation - Fatal编程技术网

Android 在低于19的api级别上使用setUpdateListener

Android 在低于19的api级别上使用setUpdateListener,android,animation,Android,Animation,对于动画,我必须聆听ViewPropertyAnimator的每一步。我将AnimatorUpdateListener与setUpdateListener结合使用。 资料来源: 我如何使用它的示例: 现在我把一个物体从A移到B,在移动过程中必须检测一些东西。现在setUpdateListener在这方面真的很有帮助,而且有了这段代码,一切都能正常工作。但是它需要api级别19。我真的很想在这个项目中使用api级别14。是否有setUpdateListener的替代方案 ViewProperty

对于动画,我必须聆听ViewPropertyAnimator的每一步。我将
AnimatorUpdateListener
setUpdateListener
结合使用。
资料来源:


我如何使用它的示例:

现在我把一个物体从A移到B,在移动过程中必须检测一些东西。现在setUpdateListener在这方面真的很有帮助,而且有了这段代码,一切都能正常工作。但是它需要api级别19。我真的很想在这个项目中使用api级别14。是否有
setUpdateListener
的替代方案

ViewPropertyAnimator.setUpdateListener


尝试使用9OldAndroid库。。它将所有版本的平台上的蜂巢(Android 3.0)动画API移植回1.0

参考链路
如果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();

注意:虽然
viewPropertyAnimator
在引擎盖下为动画视图调用
View.setHasTransientState()
,但
ObjectAnimator
不会。这可能导致在执行自定义(即不使用
itemaniator
RecyclerView
项目动画时出现不同的行为

下面是对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();
}

问题在于api 19包含一个api低于19的方法(
setUpdateListener
)。因此,api级别19上缺少的弃用/旧方法不是问题所在。反过来说。我在库中搜索了,但找不到setUpdateListener的替代方案。您可以使用valueanimator吗?它的addUpdateListener似乎只需要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();
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();
}