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