我正在使用Translate
动画(借鉴here),如下所示:
TranslateAnimation a = new TranslateAnimation(
Animation.ABSOLUTE,200, Animation.ABSOLUTE,200,
Animation.ABSOLUTE,200, Animation.ABSOLUTE,200);
a.setDuration(1000);
a.setFillAfter(true);
animationSet.addAnimation(a);
myView.startAnimation(a);
是否有任何回调可以给我myView
的当前位置?我希望在动画进行过程中根据myView
的位置执行操作。
答案 0 :(得分:1)
不幸的是没有,但你可以这样做。使用
a.setRepeatCount(200);
并将动画设置为一次移动1个像素
Animation.ABSOLUTE,1
然后
a.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
// this will fire after each repetition
}
});
答案 1 :(得分:0)
新解决方案现已作为Android Spring Physics的一部分提供。
您可以使用DynamicAnimation.OnAnimationUpdateListener
界面。
此接口的实现者可以将自己作为更新侦听器添加到DynamicAnimation
实例中,以在每个动画帧上接收回调。
这是kotlin中的快速入门代码
// Setting up a spring animation to animate the view1 and view2 translationX and translationY properties
val (anim1X, anim1Y) = findViewById<View>(R.id.view1).let { view1 ->
SpringAnimation(view1, DynamicAnimation.TRANSLATION_X) to
SpringAnimation(view1, DynamicAnimation.TRANSLATION_Y)
}
val (anim2X, anim2Y) = findViewById<View>(R.id.view2).let { view2 ->
SpringAnimation(view2, DynamicAnimation.TRANSLATION_X) to
SpringAnimation(view2, DynamicAnimation.TRANSLATION_Y)
}
// Registering the update listener
anim1X.addUpdateListener { _, value, _ ->
// Overriding the method to notify view2 about the change in the view1’s property.
anim2X.animateToFinalPosition(value)
}
// same for Y position
anim1Y.addUpdateListener { _, value, _ -> anim2Y.animateToFinalPosition(value)
}
您可以收听动画视图的每帧更新,并相应地对其他视图进行动画/更新。