对于动画,我必须聆听 ViewPropertyAnimator 的每一步。我将AnimatorUpdateListener
与setUpdateListener
结合使用。
来源: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)
答案 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
却没有。执行自定义(即不使用ItemAnimator
)RecyclerView
项目动画时,这可能会导致不同的行为。
答案 2 :(得分:0)
尝试使用9OldAndroid lib ..它将所有版本平台上的Honeycomb(Android 3.0)动画API反向移植回1.0!